与传递java.lang.Class类型的对象相关的实际场景<;T>;一种方法

与传递java.lang.Class类型的对象相关的实际场景<;T>;一种方法,java,object,Java,Object,我承认,我很好奇地知道,在任何实际情况下,都需要将java.lang.Class的对象类型或任何*.Class名称传递给java中的方法,而这种对象的可能用途是什么: 如下面的代码所示,虽然下面是一个构造函数,但我想知道是否有与此相关的通用用法: public CustomerFacadeREST() { super(Customer.class); } 提前谢谢 这在与泛型方法结合使用时非常有用:由于类型擦除,泛型方法不能在诸如T.class之类的构造中使用其泛型类型

我承认,我很好奇地知道,在任何实际情况下,都需要将java.lang.Class的对象类型或任何*.Class名称传递给java中的方法,而这种对象的可能用途是什么:

如下面的代码所示,虽然下面是一个构造函数,但我想知道是否有与此相关的通用用法:

public CustomerFacadeREST() {
        super(Customer.class);
    }

提前谢谢

这在与泛型方法结合使用时非常有用:由于类型擦除,泛型方法不能在诸如
T.class
之类的构造中使用其泛型类型参数
T
。有时,这可能是必要的-例如,创建类
T
的新实例

由于
java.lang.Class
在类型本身上是泛型的(对于
Customer
,这将是
java.lang.Class
),并且因为
Class
对象可以用作静态类型的对象工厂(即其
newInstance
方法是泛型的,返回
T
)您可以在编译时执行类型安全实例化检查


有关此技术的更多信息,请参阅。

可以与DAO设计模式一起使用

class BaseDAO{
    Class class1;
    public BaseDAO(Class class1) {
        this.class1 =class1;
    }

    public Class getClass1() {
          return class1;
    }

     public void setClass1(Class class1) {
          this.class1 = class1;
    }

    public Object findById(long id){

    }

}
class CustomerFacadeREST extends BaseDAO{

     public CustomerFacadeREST() {
         super(Customer.class);
    }

}

虽然这个问题不是很清楚,但我的理解是,你们在问任何类的类对象的用途是什么。好的,您可以将类对象用于反射目的,也就是说,编写使用通过反射获得的数据的逻辑……这样的问题很难回答,因为这样的问题没有通用的用例。基本上,当你需要它时,你就会知道;-)我的意思是,如果不完全相同,传递上面类Customer的对象不是说同样的事情的另一种方式吗?可能是+1的重复。这是我个人经历中最常见的用例。即使在
上的类型参数不是目标方法严格要求的情况下,它的存在也有助于类型推断,并且通常不需要在调用站点使用显式类型参数。例如,我有一个类可以缓存任意类型的空数组,以避免在整个系统中分配一堆空数组:
EmptyArrayCache.fromElementType(class elementType)
returning
T[]
elementType
参数告诉方法返回哪种类型的空数组。谢谢mike,更多关于我想知道的内容!有趣的是,这仅仅是为了设计模式,还是除了在super中传递Customer.class之外没有其他方法?还有其他方法(例如,具体DAO类重写的抽象方法
getUnderlyingType()
),但是对于这个特定模式,它可能对(a)有用使基础类在初始化期间可用;和(b)能够保证它永远不会改变。这使得构造函数参数成为自然选择。