Java 查找对象的运行时类类型';s参数化注释
我想检索在对象的参数化标记接口上找到的泛型类型的实际类。这可能吗 标记接口:Java 查找对象的运行时类类型';s参数化注释,java,generics,marker-interfaces,Java,Generics,Marker Interfaces,我想检索在对象的参数化标记接口上找到的泛型类型的实际类。这可能吗 标记接口: 公共接口标记接口{} 我想要的方法是: 公共类查找ParameterizedMarkerinInterface的类(MarkerinInterface MarkedObject可扩展SomeRandomClass){ //如何检索类T或其名称? } 对于那些希望知道我为什么要这样做的人: 对于一些重jpa实体,我有多个dto jpa实体。我想创建一个通用服务,为提供的dto检索正确的完整实体spring数据jpa
公共接口标记接口{}
我想要的方法是:
公共类查找ParameterizedMarkerinInterface的类(MarkerinInterface MarkedObject可扩展SomeRandomClass){
//如何检索类T或其名称?
}
对于那些希望知道我为什么要这样做的人:
对于一些重jpa实体,我有多个dto jpa实体。我想创建一个通用服务,为提供的dto检索正确的完整实体spring数据jpa存储库。dto有一个标记接口,该接口将完整实体类指定为参数化的泛型类型。编辑:可以在上找到一个很好的讨论。最简单的解决方案是在实例化对象时传递对类的引用。维护对此类的引用,以便在需要时返回。这是因为Java在运行时没有保留泛型。如果您想使用详细反射api检索通用信息,则可以在元数据中找到它 对对象本身使用
getClass()
公共最终类getClass()
返回此对象的运行时类。返回的类对象是由所表示类的静态同步方法锁定的对象。
实际结果类型是类,其中| X |是对调用getClass的表达式的静态类型的擦除。例如,此代码片段中不需要强制转换:
数字n=0;
c类=n.getClass()
返回:
表示此对象的运行时类的类对象。
另见:
文字,Java规范第15.8.2节™ 语言规范
他们不是这样问的
public class findClassForParametrizedMarkerInterface(MarkerInterface<T> markedObjectThatCouldExtendSomeRandomClass){
//How to retrieve the class T, or it's name?
}