it-swarm.com.de

Erstellen einer Instanzliste verschiedener Objekte

Ich versuche, eine Arrayliste mit verschiedenen Klasseninstanzen zu erstellen. Wie kann ich eine Liste erstellen, ohne einen Klassentyp zu definieren? (<Employee>)

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

Sie können eine Liste von Objekten wie List<Object> list = new ArrayList<Object>() erstellen. Da die Implementierung aller Klassen implizit oder explizit von der Klasse Java.lang.Object ausgeht, kann diese Liste jedes Objekt enthalten, einschließlich Instanzen von Employee, Integer, String usw.

Wenn Sie ein Element aus dieser Liste abrufen, rufen Sie eine Object und nicht mehr eine Employee ab. Das bedeutet, dass Sie in diesem Fall eine explizite Umwandlung wie folgt durchführen müssen:

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
List<Object> objects = new ArrayList<Object>();

objects list akzeptiert alle Object

Sie könnten wie folgt entwerfen

public class BaseEmployee{/* stuffs */}

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

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

und in der Liste

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

List anyObject = new ArrayList();

or

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

jetzt kann anyObjectobjects of any type halten.

benutze instanceof um what kind of object it is zu kennen.

1

Wenn Sie mit Ihren Instanzen nicht genauer als Object sein können, verwenden Sie:

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

Ansonsten sei so genau wie möglich:

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

Ich glaube, es ist am besten, wenn Sie die Liste als Objektliste deklarieren:

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

Dann können Sie alles, was Sie wollen, hineinlegen:

anything.add(new Employee(..))

Offensichtlich können Sie nichts ohne ein korrektes Casting aus der Liste lesen:

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

Ich würde von der Verwendung von Rohtypen abraten:

List anything = new ArrayList()

Da der Zweck von Generics gerade darin besteht, sie zu vermeiden, unterstützt Java in der Zukunft möglicherweise keine Raw-Typen mehr. Die Raw-Typen werden als Vermächtnis angesehen. Wenn Sie einen Raw-Typ verwenden, dürfen Sie in einer Referenz keine Generics verwenden. Schauen Sie sich diese andere Frage beispielsweise an: Kombination von Rohtypen und generischen Methoden

0
Edwin Dalorzo

Wie kann ich eine Liste erstellen, ohne einen Klassentyp zu definieren? (<Employee>)

Wenn ich dies richtig lese, möchten Sie einfach vermeiden, den Typ angeben zu müssen, richtig?

In Java 7 können Sie dies tun 

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

aber jede der anderen Alternativen, die hier diskutiert werden, wird nur die Typsicherheit opfern.

0
Louis Wasserman