2

toSet()オブジェクトを受け取り、 を返すという名前の静的ユーティリティ メソッドがありますSet

public static <T> Set<T> toSet(T item, T... otherItems) {
    Set<T> items = new HashSet<T>();
    items.add(item);
    items.addAll(Arrays.asList(otherItems));
    return items;
}

Setメソッドは他のオブジェクトで正常に動作しますが、 ofを作成したい場合はコンパイルが発生しClass<?>ます。

Set<String> strings = toSet("OK", "This works well", "No problem");
Set<Integer> numbers = toSet(1, 2, 3, 4, 5);

しかし

    Class<?> test = String.class;
    Set<Class<?>> entities = toSet(test);

お譲り致しType mismatch: cannot convert from Set<Class<capture#5-of ?>> to Set<Class<?>>ます。

ここで何か間違ったことをしていますか?キャストせずにこれを達成するにはどうすればよいですか?

ありがとうございます。

4

2 に答える 2

4

この場合、他の誰かがうまく説明できる理由で、型推論が壊れているように見えます。キャストは必要ありません。typeパラメーターを明示的に指定するだけです。

Set<Class<?>> entities = MyClass.<Class<?>>toSet(test);
于 2012-07-18T03:12:57.513 に答える
0

この方法も試してください:

 Class<String> test = String.class;
 Set<Class<String>> entities = toSet(test);
于 2012-09-14T05:11:55.277 に答える