Проблемы, поработав с arraylist

У меня есть главный класс, где я загружаю данные в arrayList и класс, названный материальным, которая призвала arrayList загружать данные.El проблема, что, загрузив данные с главного класса, у меня нет проблем, но если с другого класса я ввожу данные в этот arrayList, он начинает меня с нуля. Мне хотелось бы знать форму, которой эти данные сохраняли, хотя я буду звонить этому arrayList из нескольких классов. Потому что с базой данных было бы возможно делать без проблемы загружая данные, но он хотел использовать этот случай, чтобы манипулировать arrayList.

Приветствие и спасибо за ваше время

-1
задан 13.09.2016, 16:23
4 ответа

И если ты используешь статический arrayList?, этот поддержит данные до конца жизненного цикла приложения, которое ты будешь строить.

пример:

public static ArrayList<String> list = new ArrayList<String>(); list.add("a");

0
ответ дан 24.11.2019, 13:24

Смоги состоять в том, что, когда ты призываешь к твоему arrayList с другого этого класса делая этим miArray = new ArrayList(); то, что ты делаешь, он состоит в том, чтобы создавать новую инстанцию того же самого, пробуй признавая это Static

0
ответ дан 24.11.2019, 13:24

Очевидно коллекция будет пустой, если то, что ты делаешь, будет состоять в том, чтобы создавать инстанцию класса, который содержит коллекцию. Это происходит, потому что, когда переменная / поле / свойство класса принадлежит только инстанции, в которую верят ее, больше он не принадлежит "в класс".

После того, как принадлежит классу вместо в инстанцию, за чем оно последовало бы, состоит в том, что вышеупомянутая коллекция была бы статической и уже не зависела от инстанции.

public class Store {
    public static final List<Tipo> items = new ArrayList<>();
}

Другой выбор, в меня казаться наиболее разработанной, состоит в том, чтобы использовать Антиглавный файл Синглтон, который состоит в имении единственной инстанции через целое приложение.

public enum StorE {
  INSTANCE;
  private final List<Tipo> items = new ArrayList<>();

  public void addItem(Tipo item) {
      items.add(item);
  }

  public List<Tipo> getItems() {
      return items;
  }

  public Store getInstance() {
      return INSTANCE;
  }

}

Тогда, только ты бы это сделал, чтобы получать инстанцию Store:

Store store = Store.getInstance();
store.addItem(<<algo>>);
...
0
ответ дан 24.11.2019, 13:24

Чтобы предотвращать антиглавный файл singleton и чтобы избегать определять список как static final, то, что ты можешь делать, состоит в том, чтобы разрабатывать твое приложение для того, чтобы класс, давайте называть ее FuenteDatos, содержите твой список и все классы, которые нуждаются в том, чтобы согласиться на этот список, были должны получать инстанцию FuenteDatos как я доказываю в строителе, чтобы функционировать. Называются это связь состава: зависимость между классами и FuenteDatos это сильная зависимость, без инстанции этого класса остальные не могут функционировать.

Рисунок был бы сходным с этим:

public class FuenteDatos {
    private List<Dato> listaDatos = new ArrayList<>();

    public boolean agregar(Dato dato) {
        return listaDatos.add(dato);
    }

    //por poner un ejemplo
    public Dato buscar(int id) {
        Optional<Dato> dato = listaDatos.stream().filter(d -> d.id == id).findFirst();
        return dato.isPresent() ? dato.get() : null;
    }

    public void paraTodos(Consumer<Dato> funcionParaTodos) {
        listaDatos.forEach(funcionParaTodos);
    }
}

И потом в классах, которые нуждаются в этом:

//de acuerdo a tu descripción del problema
public class Almacen {
    private FuenteDatos fuenteDatos;
    public Almacen(FuenteDatos fuenteDatos) {
        this.fuenteDatos = fuenteDatos;
    }

    public void operacionX(Dato dato) {
        if (<reglas para validar dato) {
            fuenteDatos.agregar(dato);
        }
    }

    public void mostrarDatosEnConsola() {
        fuenteDatos.paraTodos(d -> System.out.println(
            String.format("Dato. Id: %d, Nombre: %s", d.getId(), d.getNombre())
            ));
    }
}

И с твоего главного класса ты оркеструешь интеграцию всех этих компонентов:

public class Principal {
    public static void main(String[] args) {
        //aquí creamos la instancia de FuenteDatos
        FuenteDatos fuenteDatos = new FuenteDatos();
        //aquí creamos la instancia de Almacen
        //y la asociamos a FuenteDatos
        Almacen almacen = new Almacen(fuenteDatos);
        //puedes iniciar más clases necesarias para que funcione tu aplicación aquí
        //...
        //y que comience tu aplicación
        System.out.println("Bienvenido al Almacén.");
        //resto del código...
    }
}
0
ответ дан 24.11.2019, 13:24