web-dev-qa-db-ja.com

さまざまなオブジェクトのインスタンスリストの作成

さまざまなクラスインスタンスの配列リストを作成しようとしています。クラスタイプを定義せずにリストを作成するにはどうすればよいですか? (<Employee>)

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

List<Object> list = new ArrayList<Object>()のようなオブジェクトのリストを作成できます。すべてのクラスの実装はJava.lang.Objectクラスから暗黙的または明示的に拡張されるため、このリストはEmployeeIntegerStringなどのインスタンスを含む任意のオブジェクトを保持できます。

このリストから要素を取得すると、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
17
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

インスタンスをObjectより具体的に指定できない場合は、次を使用します。

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

それ以外の場合は、できるだけ具体的にしてください。

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

List anyObject = new ArrayList();

or

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

anyObjectが保持できるようになりましたobjects of any type

instanceofを使用して、what kind of object it is

1

あなたのベストショットは、リストをオブジェクトのリストとして宣言することだと思います:

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

その後、次のように好きなものを入れることができます:

anything.add(new Employee(..))

明らかに、適切なキャストをしないとリストから何かを読むことはできません。

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

次のような未加工の型の使用はお勧めしません。

List anything = new ArrayList()

ジェネリックの全体的な目的はそれらを回避することであるため、将来的にJavaはrawタイプをサポートしなくなる可能性があります。rawタイプはレガシーと見なされ、rawタイプを使用すると、たとえば、次の質問をご覧ください: Raw型と汎用メソッドの組み合わせ

0
Edwin Dalorzo

クラスタイプを定義せずにリストを作成するにはどうすればよいですか? (<Employee>

私がこれを正しく読んでいるなら、タイプを指定する必要を避けたいだけです、正しいですか?

Java 7では、次のことができます

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

しかし、議論されている他の選択肢のいずれかは、型の安全性を犠牲にするだけです。

0
Louis Wasserman