it-roy-ru.com

Создание списка экземпляров различных объектов

Я пытаюсь создать массив различных экземпляров классов. Как я могу создать список без определения типа класса? (<Employee>)

List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee());
Employee employee = employees.get(0);
9
mypolat

Вы можете создать список объектов типа List<Object> list = new ArrayList<Object>(). Поскольку реализация всех классов распространяется неявно или явно из класса Java.lang.Object, этот список может содержать любой объект, включая экземпляры Employee, Integer, String и т.д.

Когда вы извлекаете элемент из этого списка, вы будете получать Object, а не Employee, что означает, что вам необходимо выполнить явное приведение в этом случае следующим образом:

List<Object> list = new ArrayList<Object>();
list.add("String");
list.add(Integer.valueOf(1));
list.add(new Employee());

Object retrievedObject = list.get(2);
Employee employee = (Employee)list.get(2); // explicit cast
14
Francisco Spaeth
List<Object> objects = new ArrayList<Object>();

objects список примет любой из Object

Вы можете создать как следующим образом

public class BaseEmployee{/* stuffs */}

public class RegularEmployee extends BaseEmployee{/* stuffs */}

public class Contractors extends BaseEmployee{/* stuffs */}

и в списке

List<? extends BaseEmployee> employeeList = new ArrayList<? extends BaseEmployee>();
8
Jigar Joshi

List anyObject = new ArrayList();

or

List<Object> anyObject = new ArrayList<Object>();

теперь anyObject может содержать objects of any type.

используйте instanceof , чтобы узнать what kind of object it is.

1
Kumar Vivek Mitra

Если вы не можете быть более точным, чем Object со своими экземплярами, используйте:

List<Object> employees = new ArrayList<Object>();

В противном случае будьте настолько конкретны, насколько сможете:

List<? extends SpecificType> employees = new ArrayList<? extends SpecificType>();
0
pb2q

Я считаю, что ваш лучший способ - это объявить список как список объектов:

List<Object> anything = new ArrayList<Object>();

Затем вы можете положить в нее все, что захотите, например:

anything.add(new Employee(..))

Очевидно, вы не сможете прочитать что-либо из списка без правильного приведения:

Employee mike = (Employee) anything.get(0);

Я бы не рекомендовал использовать необработанные типы, такие как:

List anything = new ArrayList()

Поскольку основная цель обобщений состоит именно в том, чтобы избежать их, в будущем Java может больше не поддерживать необработанные типы, необработанные типы считаются устаревшими, и как только вы используете необработанный тип, вам вообще не разрешается использовать обобщенные типы в данной ссылке. Например, взгляните на этот другой вопрос: Объединение необработанных типов и общих методов

0
Edwin Dalorzo

Как я могу создать список без определения типа класса? (<Employee>)

Если я правильно читаю, вы просто хотите избежать указания типа, правильно?

В Java 7 вы можете сделать 

List<Employee> list = new ArrayList<>();

но любая из обсуждаемых альтернатив просто пожертвует безопасностью типа.

0
Louis Wasserman