Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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_Oop_Generics_Reflection_Static Methods - Fatal编程技术网

从Java中的通用静态方法获取类名

从Java中的通用静态方法获取类名,java,oop,generics,reflection,static-methods,Java,Oop,Generics,Reflection,Static Methods,我有一个密码: Model.java: public abstract class Model <T> { public static <T> T find(int id) { T result = (T) blackMagicMethod(T.class, id); return result; } } ,blackMagicMethod: public Object blackMagicMethod(Class clazz, int id)

我有一个密码:

Model.java:

public abstract class Model <T> {
  public static <T> T find(int id) {
    T result = (T) blackMagicMethod(T.class, id);

    return result;
  }
}
,blackMagicMethod:

public Object blackMagicMethod(Class clazz, int id) {}
blackMagicMethod(T.class,id)
与中描述的任何黑客一样无法工作


如何使此代码工作?

泛型类型的类在运行时不可用,即
T.class
没有意义

泛型类型在编译时被转换为
对象
。这就是所谓的

如果确实需要type参数的
,则需要将其添加为参数:

public abstract class Model <T> {
    public static <T> T find(Class<T> clazz, int id) {
        T result = (T) blackMagicMethod(clazz, id);
        return result;
    }
}
公共抽象类模型{
publicstatict-find(类clazz,int-id){
T结果=(T)blackMagicMethod(clazz,id);
返回结果;
}
}
public Object blackMagicMethod(Class clazz, int id) {}
public abstract class Model <T> {
    public static <T> T find(Class<T> clazz, int id) {
        T result = (T) blackMagicMethod(clazz, id);
        return result;
    }
}