'Class<>'的类型

时间:2017-08-29 14:17:58

标签: java

根据我的阅读/理解: -

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

Class<SomeClass>是一种表示此对象的方法,该对象的类型为Class,并且是在创建类型SomeClass类的任何对象时创建的(根据上面的定义),并且与SomeClass类相关联。

但是当我在StackOverflow线程下面阅读时,关于Class<?>: -

What does Class<?> mean in Java?

在第一个答案中说,通过编写Class<?>,我们宣布一个Class对象可以是任何类型。我很困惑,不管Class是什么,这个对象都不是?类型,因为它是类Class的对象?

我不明白'通用'是什么。如果您必须在答案中使用该术语,我真的很感激您是否可以同时解释这一点。感谢。

1 个答案:

答案 0 :(得分:0)

  

在第一个答案中说,通过编写Class<?>,我们可以声明一个Class对象,它可以是任何类型。我很困惑,不管是什么,这个对象都不属于Class类型?是,因为它是类Class的对象?

没有。使用Class<?>时,强制使用可参数化的类。例如,您可以使用List<>,因为List可参数化:例如List<String>。您无法使用Dog

  

我不明白&#39; generic&#39;是。如果您必须在答案中使用该术语,我真的很感激您是否可以同时解释这一点

根据the documentation

  

简而言之,泛型使类型(类和接口)在定义类,接口和方法时成为参数。与方法声明中使用的更熟悉的形式参数非常相似,类型参数提供了一种使用不同输入重用相同代码的方法。不同之处在于形式参数的输入是值,而类型参数的输入是类型。

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

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

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

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

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

此函数将返回String个对象,因为我将其声明为List<String>!因此,我不必操纵对象列表,然后自己投射。我在列表的声明中定义了列表的内容。