-1

Custom というクラスがあり、Custom クラスが引数として渡されたときに Custom の Collection 型を返すメソッド getAll(Class) を使用できるようにしたいと考えています。

Collection<Custom> c = null;
c = getAll(Custom.class);

public static <T> Collection<T> getAll(Class<T> type) {
    Collection<type> t = new ArrayList<type>();
    return t;
}

上記は私の試みですが、コンパイラはクラスを渡すことができないと不平を言っています。これはこれを行う正しい方法ですか?型の理由は、さまざまなクラスが getAll() を呼び出して、呼び出し元のクラスをコレクション型として持つことができるようにするためです。

tl;dr - 任意のクラスを取ることができるユニバーサル メソッドが必要です。ありがとう!

4

2 に答える 2

3

申し訳ありませんが、コードが複数の点で壊れています。

Collection<type> t = new Collection<type>;

type本来あるべきもの (コンパイル- ジェネリックは「消去によって」実装されるため、実行時には使用できません)? Collection<T>代わりに試してください。

コンストラクターには が必要ですが()、これCollectionはインターフェイスであるため、インスタンス化できません...new ArrayList<T>()代わりに試してください。

すなわち

public static <T> Collection<T> getAll(Class<T> type) {
    return new ArrayList<T>();
}

私のために働きます。

Class<T>パラメータが良いアイデアである理由の例を次に示します。

Iterator<Integer> it1 = getAll(Integer.class)).iterator(); // Works.
Iterator<Integer> it2 = getAll().iterator(); // Does not work.
于 2013-06-12T15:38:53.130 に答える