查找对象参数化注释的运行时classtype

时间:2014-07-18 11:48:21

标签: java generics marker-interfaces

我希望检索在对象的参数化标记界面上找到的泛型类型的实际类。这甚至可能吗?

标记界面:

public interface MarkerInterface<T> {}

我喜欢的方法:

public class findClassForParametrizedMarkerInterface(MarkerInterface<T> markedObjectThatCouldExtendSomeRandomClass){

    //How to retrieve the class T, or it's name?

}

对于那些希望知道我为什么要这样做的人: 对于一些重jpa实体,我有多个dto jpa实体。我想创建一个通用服务,为所提供的dto检索正确的完整实体spring数据jpa存储库。 dto有一个标记接口,指定完整实体类作为参数化泛型类型。

1 个答案:

答案 0 :(得分:0)

编辑:可以在Get generic type of class at runtime找到一个很好的讨论。最简单的解决方案是在实例化对象时传递对类的引用。保持对此类的引用以在需要时返回。这是因为Java在运行时没有保留泛型。如果要使用详细反射API来检索通用信息,则可以使用元数据。

在对象本身上使用getClass()

public final Class getClass() 返回此Object的运行时类。返回的Class对象是由所表示的类的静态同步方法锁定的对象。 实际结果类型是Class,其中| X |是调用getClass的表达式的静态类型的擦除。例如,此代码片段中不需要强制转换:

数字n = 0; 类c = n.getClass();

返回: Class对象,表示此对象的运行时类。 也可以看看: 文字,Java™语言规范的第15.8.2节。

<击> http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#getClass()