【问题标题】:Type of 'Class<>' [duplicate]“类<>”的类型[重复]
【发布时间】:2017-08-29 14:17:57
【问题描述】:

根据我的阅读/理解:-

JVM 每次创建对象时,也会创建一个描述对象类型的java.lang.Class 对象。同一个类的所有实例共享同一个Class 对象。

Class&lt;SomeClass&gt; 是表示此对象的一种方式,该对象的类型为Class,并且是在创建SomeClass 类型的任何对象时创建的(根据上述定义),并且与SomeClass 相关联班级。

但是当我阅读下面的 StackOverflow 线程时,关于 Class&lt;?&gt;:-

What does Class<?> mean in Java?

在第一个答案中说,通过编写Class&lt;?&gt;,我们声明了一个可以是任何类型的Class 对象。我很困惑,不管?是什么,这个对象不是Class类型吗,因为它是Class类的对象?

我不明白什么是“通用”。如果您必须在回答中使用该术语,如果您也能同时解释这一点,我将不胜感激。谢谢。

【问题讨论】:

  • 你可能想开始here。 IMO 这个问题太宽泛了。
  • 如果你不想处理泛型,你不必担心未知类型(>)。

标签: java


【解决方案1】:

在第一个答案中说,通过编写Class&lt;?&gt;,我们声明了一个可以是任何类型的Class 对象。我很困惑,不管是什么,这个对象不会是Class 类型吗?是,因为它是 Class? 类的对象?

没有。当您使用Class&lt;?&gt; 时,您会强制使用可参数化的类。例如,您可以使用List&lt;&gt;,因为List 是可参数化的:例如List&lt;String&gt;。你不能使用Dog

我不明白什么是“通用”。如果您必须在回答中使用该术语,如果您也能同时解释这一点,我将不胜感激

根据the documentation

简而言之,泛型使类型(类和接口)在定义类、接口和方法时成为参数。就像在方法声明中使用的更熟悉的形式参数一样,类型参数为您提供了一种通过不同输入重用相同代码的方法。区别在于形式参数的输入是值,而类型参数的输入是类型。

了解它们的最简单方法可能是查看Lists 类。使用时:

List<String> list = new ArrayList<>();

您正在指定链接到您的List 的类型。然后可以在您的函数或实现中使用此类型:

想象一下ArrayList 类中的这个函数:

public T get(int index) {
    return this.get(index);
}

这个函数将返回一个String 对象,因为我将它声明为List&lt;String&gt;!所以我不必操作对象列表,然后自己进行转换。我在我的列表声明中定义了列表的内容。

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2019-06-04
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多