这是我的代码:
Set<MyObject<?, ?>> mySet = getSetOf(MyObject.class);
public <T> Set<T> getSetOf(Class<T> setClass) {
Set<T> set = new HashSet<>();
// ...
return set;
}
所以基本上我想编写一个方法来返回一组特定类类型的对象。编译器抱怨getSetOf(Class)
的返回类型与mySet
的声明不同。如果我将mySet
的声明更改为Set<MyObject> mySet
,那么很高兴。但我遵循的做法是不使用原始类型声明变量,因此对其进行参数化。
你如何解决这个问题?
答案 0 :(得分:2)
如果Class<T>
参数纯粹用于T
的类型信息,则不需要。您可以返回通用Set<T>
,它会根据类型推断确定T
的内容。
Set<MyObject<?,?>> mySet = getSet();
public <T> Set<T> getSet() {
Set<T> set = new HashSet<>();
// ...
return set;
}
class MyObject<T,U> {}
如果您确实需要Class<T>
用于反映,请将其更改为Class<?>
,以便它不会影响T
的推断类型。