繁体   English   中英

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

[英]Getting the class name from a generic static method in Java

我有一个代码:

Model.java:

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

    return result;
  }
}

,User.java

public class User extends Model<User> {
}

,Main.java:

public class Main {
  public static void main(String[] args) {
    System.out.println(User.find(1));
  }
}

,blackMagicMethod:

public Object blackMagicMethod(Class clazz, int id) {}

blackMagicMethod(T.class, id)行不起作用,就像从Java中的静态方法获取类名中描述的任何hack一样。

如何使此代码正常工作?

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

泛型类型在编译时被转换为Object 这就是所谓的Type Erasure

如果您确实需要类型参数的class ,则需要将其添加为参数:

public abstract class Model <T> {
    public static <T> T find(Class<T> clazz, int id) {
        T result = (T) blackMagicMethod(clazz, id);
        return result;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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