繁体   English   中英

从Java中的泛型类获取类实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM