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

13

Java通配符使用准则称:

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

ObjectgetClass方法返回一个Class<?>对象。在Class中的各种方法接受Class<?>,如果您传入一个Class,编译器将返回未经检查的警告。这导致我认为始终使用Class<?>是可取的。

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


3
根据您提供的引用语,我理解他们在谈论上面的四个要点。在我所提供的引用中,它继续给出了返回类型的“指南”。这不仅涉及到getClass,还涉及到使用Class方法时未经检查的警告,这让我感到质疑。 - David V
2个回答

3
如果你想要返回一个通用的类型,使用通配符比使用原始类型要好得多——如果你在代码中开始使用原始类型,那么实际上就关闭了你从正确使用泛型中获得的所有其他类型安全检查。该指南表示应该避免使用通配符,并非必须不使用。在给定的场景中,应该使用最具体的类型,这可能是类型参数的具体实例化、有界的 extends 或 super 通配符或无边界通配符,但任何一种选择都比使用原始类型更好。

3

使用 MyType<?> 总是比使用原始类型的 MyType 更可取(这也适用于 Class)。指南认为新代码不会使用原始类型,原始类型仅出于向后兼容性而支持。他们并不建议您在最佳情况下使用 ? 时放弃泛型。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接