方法应该返回 Class 还是 Class<?>?

2022-09-04 22:55:21

Java 通配符使用指南说:

应避免使用通配符作为返回类型,因为它会强制程序员使用代码来处理通配符。

该方法返回 .中的各种方法接受 a,如果传入,编译器将返回未经检查的警告。这使我认为始终使用是可取的。ObjectgetClassClass<?>ClassClass<?>ClassClass<?>

如果我有一个返回 a 的方法,并且我不知道该对象将如何使用,我应该返回哪种类型或?为什么?是否有任何情况下我可能只想返回?ClassClassClass<?>Class


答案 1

使用总是比使用原始更好(这延伸到 )。这些准则认为新代码不会使用原始类型,而原始类型仅支持向后兼容性。他们并不是建议你放弃泛型,而你能做的最好。MyType<?>MyTypeClass?

通过使用通配符参数,泛型的编译时类型安全保证仍然有效。这些保证只存在于没有强制转换和原始类型的情况下


答案 2

如果你想返回一个泛型的类型,那么使用通配符肯定比使用原始类型更可取 - 如果你开始在代码中使用原始类型,那么这将有效地关闭你从正确使用泛型中获得的所有其他类型安全检查。

该指南说应该避免使用通配符,而不是说不能使用它们。应使用在给定方案中有意义的最具体的类型,该类型可能是类型参数的具体实例化、有界或通配符或无界通配符,但其中任何一个都比原始类型更好。extendssuper


推荐