java对象与对象的权衡是什么?在通用参数中? 11 月 Questions & Answers 113 我看到一些代码使用Object而不是通配符(?)作为泛型类的参数。这会导致客户机代码中出现显式强制转换。分别有什么好处。这种方法的权衡
# 1 楼答案 使用Object作为类型参数与使用?完全不同。请参见以下两种方法: void frobnicate1(List<?> someList); void frobnicate2(List<Object> someList); 当它们从List中获得一个元素时,它们都会收到List,并且都会收到Object,但是{}可以用List<String>甚至List<?>调用,而frobnicate2只能被List<Object>(或null)调用 请注意,不能使用通配符类型参数(?)实例化参数化类型 因此,以下内容将不起作用: List<?> someList = new ArrayList<?>(); 您必须使用Object(或任何其他非通配符类型): List<?> someList = new ArrayList<Object>(); 不要担心显式强制转换:JVM可以对其进行优化(而且可能会),因为对Object的任何引用值的强制转换都会成功
# 1 楼答案
使用
Object
作为类型参数与使用?
完全不同。请参见以下两种方法:当它们从}可以用
List
中获得一个元素时,它们都会收到List
,并且都会收到Object
,但是{List<String>
甚至List<?>
调用,而frobnicate2
只能被List<Object>
(或null
)调用请注意,不能使用通配符类型参数(
?
)实例化参数化类型因此,以下内容将不起作用:
您必须使用
Object
(或任何其他非通配符类型):不要担心显式强制转换:JVM可以对其进行优化(而且可能会),因为对
Object
的任何引用值的强制转换都会成功