无法从 Set<MyObject> 转换为 Set<MyObject<?,?>>
Getting Cannot convert from Set<MyObject> to Set<MyObject<?,?>>
这是我的代码:
Set<MyObject<?, ?>> mySet = getSetOf(MyObject.class);
public <T> Set<T> getSetOf(Class<T> setClass) {
Set<T> set = new HashSet<>();
// ...
return set;
}
所以基本上我想编写一个方法,return 是一组特定 class 类型的对象。编译器抱怨 getSetOf(Class)
的 return 类型与 mySet
的声明不同。如果我将 mySet
的声明更改为 Set<MyObject> mySet
那么它很高兴。但是我遵循的做法是不使用原始类型来声明变量,因此将其参数化。
你是如何解决这个问题的?
如果Class<T>
参数的存在纯粹是为了T
的类型信息,那么就没有必要了。您可以 return 泛型 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
.[=19 的推断类型=]
这是我的代码:
Set<MyObject<?, ?>> mySet = getSetOf(MyObject.class);
public <T> Set<T> getSetOf(Class<T> setClass) {
Set<T> set = new HashSet<>();
// ...
return set;
}
所以基本上我想编写一个方法,return 是一组特定 class 类型的对象。编译器抱怨 getSetOf(Class)
的 return 类型与 mySet
的声明不同。如果我将 mySet
的声明更改为 Set<MyObject> mySet
那么它很高兴。但是我遵循的做法是不使用原始类型来声明变量,因此将其参数化。
你是如何解决这个问题的?
如果Class<T>
参数的存在纯粹是为了T
的类型信息,那么就没有必要了。您可以 return 泛型 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
.[=19 的推断类型=]