无法从 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> {}

Ideone Demo

如果您确实需要 Class<T> 来进行反射,请将其更改为 Class<?>,这样它就不会影响 T.[=19 的推断类型=]