web-dev-qa-db-fra.com

Création d'une liste d'instances de différents objets

J'essaie de créer un arraylist de différentes instances de classe. Comment créer une liste sans définir de type de classe? (<Employee>)

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

Vous pouvez créer une liste d'objets comme List<Object> list = new ArrayList<Object>(). Comme toutes les implémentations de classes s'étendent implicitement ou explicitement à partir de la classe Java.lang.Object, cette liste peut contenir n'importe quel objet, y compris les instances de Employee, Integer, String etc.

Lorsque vous récupérez un élément de cette liste, vous récupérez une Object et non plus une Employee, ce qui signifie que vous devez effectuer une conversion explicite dans ce cas de la manière suivante:

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 liste acceptera l’un des Object

Vous pouvez concevoir comme suit

public class BaseEmployee{/* stuffs */}

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

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

et en liste

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

List anyObject = new ArrayList();

or

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

maintenant anyObject peut contenir objects of any type.

utilisez instanceof pour connaître what kind of object it is.

1
Kumar Vivek Mitra

Si vous ne pouvez pas être plus spécifique que Object avec vos instances, utilisez:

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

Sinon, soyez aussi précis que possible:

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

Je crois que votre meilleur coup est de déclarer la liste comme une liste d'objets:

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

Ensuite, vous pouvez y mettre ce que vous voulez, comme:

anything.add(new Employee(..))

Evidemment, vous ne pourrez rien lire en dehors de la liste sans un casting approprié:

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

Je découragerais l'utilisation de types bruts tels que:

List anything = new ArrayList()

Etant donné que les génériques ont précisément pour objectif de les éviter, à l'avenir, Java ne peut plus importer de types bruts, les types bruts sont considérés comme hérités et une fois que vous utilisez un type brut, vous ne pouvez plus utiliser de génériques dans une référence donnée. Par exemple, jetez un oeil à cette autre question: Combinaison de types bruts et de méthodes génériques

0
Edwin Dalorzo

Comment créer une liste sans définir de type de classe? (<Employee>)

Si je lis ceci correctement, vous voulez juste éviter de spécifier le type, n'est-ce pas?

En Java 7, vous pouvez faire 

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

mais aucune des autres solutions en cours de discussion ne fera que sacrifier la sécurité de type.

0
Louis Wasserman