gpt4 book ai didi

java - Java 中的 Class clazz 和 Class clazz 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 21:40:01 24 4
gpt4 key购买 nike

我需要在 java 中使用反射。我明白 Class clazz创建一个代表 Class 的变量目的。但是,我正在尝试引用 Class来自 String 的对象使用 forName("aClassName")方法。我的 IDE (Eclipse),似乎更喜欢这种符号 Class<?> clazz用于声明变量。我在其他地方多次看到过这种表示法。这是什么意思?

编辑:删除了对三元运算符的引用,因为它与此问题无关。

最佳答案

Class是一个原始类型 - 它基本上是一个泛型类型,您将其视为您根本不了解泛型。

Class<?>是使用未绑定(bind)通配符 的通用类型 - 它基本上意味着“Class<Foo> 对于某种类型 Foo ,但我不知道是什么”。

同样,您可以使用带边界的通配符:

  • Class<? extends InputStream>表示“Class<Foo> 对于某种类型 Foo ,但我不知道是什么,只要它是 InputStream 或子类”

  • Class<? super InputStream>表示“Class<Foo> 对于某种类型 Foo ,但我不知道是什么,只要它是 InputStream 或父类(super class)”

另见 Java Generics FAQ 很多更多信息:

以及 Java 语言规范:

特别是从原始类型部分:

Raw types are closely related to wildcards. Both are based on existential types. Raw types can be thought of as wildcards whose type rules are deliberately unsound, to accommodate interaction with legacy code. Historically, raw types preceded wildcards; they were first introduced in GJ, and described in the paper Making the future safe for the past: Adding Genericity to the Java Programming Language by Gilad Bracha, Martin Odersky, David Stoutamire, and Philip Wadler, in Proceedings of the ACM Conference on Object-Oriented Programming, Systems, Languages and Applications (OOPSLA 98), October 1998.

关于java - Java 中的 Class clazz 和 Class<?> clazz 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144641/

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