获取无法从Set <myobject>转换为Set <myobject <?,?>&gt;

时间:2017-10-27 00:23:53

标签: java generics type-erasure

这是我的代码:

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,那么很高兴。但我遵循的做法是不使用原始类型声明变量,因此对其进行参数化。

你如何解决这个问题?

1 个答案:

答案 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> {}

Ideone Demo

如果您确实需要Class<T>用于反映,请将其更改为Class<?>,以便它不会影响T的推断类型。