java中的Object vs Class <T>(vs Class <?>?)?

use*_*823 8 java generics

我是Java的新手.这可能是一个愚蠢的问题 - 但我无法在任何地方找到答案.如果你想声明一个接收未知对象并对其做某事的方法(例如复制它),那么之间的区别是:

<T> T func(Class<T> cls){
    //do something
}

Object func(Object o){
    //do something 
}
Run Code Online (Sandbox Code Playgroud)

他们可比吗?你有什么能用上述方法而不是其他方法吗?哪里Class<?>适合?

Lui*_*oza 5

您代码中的区别在于,前者func接收到一个Class<T>(可以是Class<?>),这意味着该方法仅接收一个Class类型。后者接收任何对象,无论它是类还是其他类型的对象。

Classjavadoc:

类Class的实例表示正在运行的Java应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组还属于一个反映为Class对象的类,该类对象由元素类型和维数相同的所有数组共享。

请注意,这Class是您的课程的元数据。


如果您的代码是这样的:

<T> T func(T o){
    //do something
}

Object func(Object o){
    //do something 
}
Run Code Online (Sandbox Code Playgroud)

主要区别在于返回类型:前一个返回类型应与参数的类型相同,而后者是泛型的Object。例如:

Object func(Object o){
    //do something 
    return o.toString(); //compiles and works
}
<T> T func(T o){
    //do something
    return o.toString(); //does not compile
}
Run Code Online (Sandbox Code Playgroud)