[英]Getting class instance from generic type in Java
我有一个方法,我传递一个泛型参数。 要执行一个必需的方法,我需要相同的类实例。 我怎么才能得到它。 我正在使用一种解决方法,但我想知道如何获取Class
实例。
我正在使用的片段是:
public <T> T readModelWithId(Class<T> c, Serializable pk) {
// Some code here.
T t = (T)session.get(c, pk);
// Some code here.
return t;
}
问题是我不想在这个方法中传递Class
实例,因为它与泛型类型的返回类型T
相同。
你无法在该方法中获得类似T.class
东西,所以你必须传递类参数,因为你需要它来从会话中获取模型对象。
而且,这增加了一些额外的“类型安全性”。 您将强制调用者将返回类型指定为参数,因此返回的类型不仅仅是“调用者可能期望的任何内容”(尽管我同意这会使其变得多余)。
你不能这样做是因为Java使用“类型擦除”来实现泛型。
http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
看起来你正在做一个通用的DAO。 我在这里做了类似的事情:
http://www.matthews-grout.co.uk/2012/01/my-generic-hibernate-dao.html
对于使用非转换的非泛型,你无法对泛型做任何事情。 考虑代码的非泛型版本:
public Object readModelWithId(Class c, Serializable pk) {
// Some code here.
Object t = session.get(c, pk);
// Some code here.
return t;
}
现在问同样的问题,你能摆脱类实例参数c
吗?
泛型更适用于编译时类型安全 - 您需要类实例,因此编译器不会抱怨缺少强制转换。 或者你可以完全抛弃泛型并投射结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.