Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在静态方法中获取实际泛型类型的类对象_Java_Generics_Types_Static - Fatal编程技术网

Java 在静态方法中获取实际泛型类型的类对象

Java 在静态方法中获取实际泛型类型的类对象,java,generics,types,static,Java,Generics,Types,Static,我有一个泛型静态方法,我希望它返回插入的实际泛型类型的类对象 我试过这样做: @SuppressWarnings("unchecked") public static <T> Class<T> getClassType() { Method thisMethod; try { thisMethod = CommonTools.class.getMethod("getClass", new Class<?>[0]); }

我有一个泛型静态方法,我希望它返回插入的实际泛型类型的类对象

我试过这样做:

@SuppressWarnings("unchecked")
public static <T> Class<T> getClassType() {

    Method thisMethod;
    try {
        thisMethod = CommonTools.class.getMethod("getClass", new Class<?>[0]);
    } catch (Exception ex) {
        //ErrorLog.error(ex.getMessage(), ex);
        return null;
    }

    Type returnType = thisMethod.getGenericReturnType();
    Type tType = returnType.getClass().getGenericSuperclass();
    ParameterizedType parameterizedType = (ParameterizedType) tType;
    Class<T> clazz = (Class<T>) parameterizedType.getActualTypeArguments()[0];

    return clazz;
}
(((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
@SuppressWarnings(“未选中”)
公共静态类getClassType(){
方法本法;
试一试{
thisMethod=CommonTools.class.getMethod(“getClass”,新类[0]);
}捕获(例外情况除外){
//ErrorLog.error(例如getMessage(),例如);
返回null;
}
类型returnType=thisMethod.getGenericReturnType();
类型tType=returnType.getClass().getGenericSuperclass();
ParameteredType ParameteredType=(ParameteredType)tType;
类clazz=(类)ParameteredType.getActualTypeArguments()[0];
回击声;
}
我的灵感来源于谷歌代码morphia库,在那里他们使用了类似的东西:

@SuppressWarnings("unchecked")
public static <T> Class<T> getClassType() {

    Method thisMethod;
    try {
        thisMethod = CommonTools.class.getMethod("getClass", new Class<?>[0]);
    } catch (Exception ex) {
        //ErrorLog.error(ex.getMessage(), ex);
        return null;
    }

    Type returnType = thisMethod.getGenericReturnType();
    Type tType = returnType.getClass().getGenericSuperclass();
    ParameterizedType parameterizedType = (ParameterizedType) tType;
    Class<T> clazz = (Class<T>) parameterizedType.getActualTypeArguments()[0];

    return clazz;
}
(((Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
((类)((参数化类型)getClass().getGenericSuperclass()).getActualTypeArguments()[0]))
我的代码和他们的代码之间的区别在于,他们调用它是为了在类中查找泛型类型——我希望在方法中使用它

我的代码不工作,它在(类)转换行中

您知道如何从静态方法获取当前泛型类型吗


谢谢

它不会工作的。您将获得方法
getClass
,它基本上具有返回类型
Class
,然后您将调用
getActualTypeArguments
,它将返回
Class
,因为TypeArguments是CommonTools

如果您将调用
classct=getClassType()它会起作用,但是没有必要拥有这样的信息

据我所知,没有办法获得这些信息,因为JVM在运行时会擦除所有的通用信息。
最简单的解决方案是,
CommonTools
将在创建时获取
Class
实例,并返回它,但它不是那么常见。

为什么它应该是公共静态类getClassType()的2倍如果我没有错的话,那么这个方法应该如何知道T是一个泛型参数呢?我想你可以使用创建一个类家族。你也可以写一个工厂,给你的父类一个类型enum,然后使用工厂根据传递的enum值将你的类转换成特定的类型。我想从静态类使用它,你的解决方案不是我想要的好吧,所以在java中不可能在运行时知道方法的泛型类型?是的,读这里:还有这里