Java Guidelines for Wildcard Use说:
应该避免使用通配符作为返回类型,因为它会强制程序员使用代码来处理通配符。
Object
getClass
方法返回Class<?>
。 Class
中的各种方法接受Class<?>
,如果传入Class
,编译器将返回未经检查的警告。这使我认为始终使用Class<?>
更为可取。
如果我有一个返回Class
的方法,并且我不知道该对象将如何使用,我应该返回Class
或Class<?>
哪种类型?为什么?是否有任何情况我可能只想回复Class
?
答案 0 :(得分:3)
如果你想返回一个通用的类型,那么使用通配符肯定比使用原始类型更好 - 如果你开始在代码中使用原始类型,那么这将有效地关闭你将从中获得的所有其他类型的安全检查正确使用泛型。
指南说明应避免使用通配符,而不是必须不能使用。您应该使用在给定方案中有意义的最具体的类型,这可能是类型参数的具体实例化,有界extends
或super
通配符,或无界通配符,但这些中的任何一个是一种比原始类型更好的选择。
答案 1 :(得分:3)
使用MyType<?>
总是优于使用原始MyType
(并且扩展到Class
)。该指南认为新代码不会使用原始类型,只支持向后兼容性。当?
是您能做的最好时,他们并不建议您放弃泛型。
通过使用wildcard参数,泛型的编译时类型安全保证仍然成立。这些保证仅存在于演员表和原始类型的缺席中。