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(子级);
也许您可以返回SetnewHashSet
将始终返回其泛型类型参数的类型。由于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
}