Java 获取无法从集合转换<;MyObject>;设置<;MyObject<&燃气轮机&燃气轮机;

Java 获取无法从集合转换<;MyObject>;设置<;MyObject<&燃气轮机&燃气轮机;,java,generics,type-erasure,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; } Set如果Class参数纯粹用于T的类型信息,那么它是不必要的。您

这是我的密码:

Set<MyObject<?, ?>> mySet = getSetOf(MyObject.class);

public <T> Set<T> getSetOf(Class<T> setClass) {
    Set<T> set = new HashSet<>();
    // ...
    return set;
}
Set如果
Class
参数纯粹用于
T
的类型信息,那么它是不必要的。您可以返回一个泛型
,它将根据类型推断确定
T
是什么

Set<MyObject<?,?>> mySet = getSet();

public <T> Set<T> getSet() {
    Set<T> set = new HashSet<>();
    // ...
    return set;
}

class MyObject<T,U> {}
设置
,这样它就不会影响
t

的推断类型。如果
参数仅用于
t
的类型信息,那么就没有必要了。您可以返回一个泛型
,它将根据类型推断确定
T
是什么

Set<MyObject<?,?>> mySet = getSet();

public <T> Set<T> getSet() {
    Set<T> set = new HashSet<>();
    // ...
    return set;
}

class MyObject<T,U> {}

设置
,这样就不会影响
t
的推断类型

设置
不是原始类型。。。告诉我们
MyObject
类是什么样子的。@alfasin说
Set
不是原始类型…:抱歉
MyObject
是一个接受两个参数的泛型类(上面没有显示)。这样的方法完全没有意义。@alfasin说,告诉我们
MyObject
类看起来是什么样子:抱歉,这不重要,也不是这个问题的重点。你可以用
List
替换
MyObject
,我的问题仍然有效。如果你能提供一个最简单的具体例子来说明你在说什么,我很乐意进一步深入研究。现在我很清楚你在做什么/试图做什么,无论是使用对象还是
getSetOf()
Set
都不是原始类型。。。告诉我们
MyObject
类是什么样子的。@alfasin说
Set
不是原始类型…:抱歉
MyObject
是一个接受两个参数的泛型类(上面没有显示)。这样的方法完全没有意义。@alfasin说,告诉我们
MyObject
类看起来是什么样子:抱歉,这不重要,也不是这个问题的重点。你可以用
List
替换
MyObject
,我的问题仍然有效。如果你能提供一个最简单的具体例子来说明你在说什么,我很乐意进一步深入研究。现在我很清楚你在做什么/试图做什么,无论是用你的对象还是用
getSetOf()
。虽然这是真的,但我认为这样做没有任何附加价值:为了将
MyObject
类型的对象添加到集合中,你必须将它们强制转换为
t
。@4castle wait,当我使用
getSetOf(MyObject.class).forEach(o->o.someMethod())
时,有一个问题是它无法识别
o
MyObject
?@user1589188类型的,只有以某种方式提供
T
的类型,类型推断才会起作用。赋值给变量是一种方法。@user1589188如果我知道为什么需要
参数,我觉得我可以为您提供更多帮助。您是否使用它来创建
MyObject
的实例?如果是这样,最好使用
Supplier
@4castle将方法引用传递给构造函数作为参数,谢谢。正如您所说,我正在使用反射来收集类对象实例成员字段中的一组特定类对象。虽然这是事实,但我认为这样做没有任何附加值:为了将类型为
MyObject
的对象添加到集合中,您必须将它们强制转换为
t
…@4castle wait,当我使用
getSetOf(MyObject.class).forEach(o->o.someMethod())
时,有一个问题是它无法识别
o
MyObject
?@user1589188类型的,只有以某种方式提供
T
的类型,类型推断才会起作用。赋值给变量是一种方法。@user1589188如果我知道为什么需要
参数,我觉得我可以为您提供更多帮助。您是否使用它来创建
MyObject
的实例?如果是这样,最好使用
Supplier
@4castle将方法引用传递给构造函数作为参数,谢谢。正如您所说,我使用反射在类对象实例的成员字段中收集一组特定的类对象。