14

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

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

8 に答える 8

23

のようなオブジェクトのリストを作成できます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
于 2012-06-17T17:55:58.917 に答える
11
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>();
于 2012-06-17T17:56:22.063 に答える
2

List anyObject = new ArrayList();

or

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

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

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

于 2012-06-17T18:01:42.827 に答える
2

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

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

次に、次のように、必要なものを何でも入れることができます。

anything.add(new Employee(..))

明らかに、適切なキャストなしではリストから何かを読み取ることはできません:

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

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

List anything = new ArrayList()

ジェネリックの全体的な目的は正確にそれらを回避することであるため、将来 Java は生の型をサポートしなくなる可能性があり、生の型はレガシーと見なされ、生の型を使用すると、特定の参照でジェネリックを使用することはまったく許可されません。たとえば、この別の質問を見てください:生の型とジェネリック メソッドの結合

于 2012-06-17T18:03:28.730 に答える
1

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

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

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

List<? extends SpecificType> employees = new ArrayList<? extends SpecificType>();
于 2012-06-17T17:56:28.803 に答える
1

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

私がこれを正しく読んでいれば、タイプを指定する必要がないようにしたいだけですよね?

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

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

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

于 2012-06-17T18:11:44.140 に答える