Java 如何强制使用静态泛型方法';什么是退货类型?

Java 如何强制使用静态泛型方法';什么是退货类型?,java,generics,java-7,Java,Generics,Java 7,具有类层次结构: String child = null; Object parent = child; 如何在传递字符串参数时强制返回集?将类型参数显式传递给新哈希集: Sets.<Object>newHashSet(child); 如您所见,newHashSet()采用类型参数E。结果是HashSetE被推断为String,但是您已经指定了返回Set的方法。解决方案是帮助编译器或放宽返回类型中的限制,以Set您可以使用以下命令指定通用返回类型: Sets.<Object

具有类层次结构:

String child = null;
Object parent = child;

如何在传递
字符串
参数时强制返回

将类型参数显式传递给
新哈希集

Sets.<Object>newHashSet(child);

如您所见,
newHashSet()
采用类型参数
E
。结果是
HashSet
E
被推断为
String
,但是您已经指定了返回
Set
的方法。解决方案是帮助编译器或放宽返回类型中的限制,以
Set您可以使用以下命令指定通用返回类型:

Sets.<Object>newHashSet(child);
set.newHashSet(子级);

也许您可以返回
Set
newHashSet
将始终返回其泛型类型参数的类型。由于
child
的类型为
String
,编译器将推断泛型类型为
String
,函数将返回一个
HashSet

您只需将
对象
传递给它,方法是显式地强制编译器将
对象
推断为泛型类型:

Sets.newHashSet((Object) child);
或者,您可以强制使用泛型类型,编译器现在可以看到强制转换非常简单:

Sets.<Object>newHashSet(child);
set.newHashSet(子级);

在Java8中,这可以很好地编译;推理考虑了目标类型

public Set<Object> myMethod() {
    return Sets.newHashSet(child);
}
publicset myMethod(){
返回集合。newHashSet(子级);
}
使用JDK的API:

public Set<Object> myMethod() {
    return Collections.singleton(child); // Works too
}
publicset myMethod(){
return Collections.singleton(child);//也可以
}
在Java5、6、7中,此调用的推理仅在参数类型上完成

public Set<Object> myMethod() {
    return Sets.newHashSet(child);
}
public Set<Object> myMethod() {
    return Collections.singleton(child); // Works too
}