gpt4 book ai didi

java - 是否可以从泛型方法返回原始对象?

转载 作者:行者123 更新时间:2023-12-01 12:39:55 26 4
gpt4 key购买 nike

Colletions研究这个方法类:

@SuppressWarnings("unchecked")
public static final <T> Set<T> emptySet() {
return (Set<T>) EMPTY_SET;
}
<小时/>
Collections.emptySet() return `Set<Object>`

此行为与泛型类不同。如果我实例化泛型类时没有 <T>我使用原始对象。

在方法接受通用集因编译错误而失败后,我注意到了这一点:

public class GenericMethodRaw {
public static void main(String [] args){
Set set = Collections.emptySet();
method(set); //fine
method(Collections.emptySet()); //compilation error here
Set<String> set1 = Collections.emptySet();//fine compilation
}
public static void method(Set<String> strings){}
}

编译器消息:

java: method method in class GenericMethodRaw cannot be applied to given types;
required: java.util.Set<java.lang.String>
found: java.util.Set<java.lang.Object>
reason: actual argument java.util.Set<java.lang.Object> cannot be converted to java.util.Set<java.lang.String> by method invocation conversion

最佳答案

就术语而言,对象不是原始。引用值的类型即可。方法返回值的类型必须与方法的返回类型兼容。在 emptySet 方法中,这是因为强制转换。

无论如何,客户端永远不会看到调用中发生的情况,他们所知道的只是方法调用表达式具有基于其调用上下文的类型。

关于java - 是否可以从泛型方法返回原始对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25206185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com