Tim*_*lim 4 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;
}
}
Run Code Online (Sandbox Code Playgroud)
,User.java
public class User extends Model<User> {
}
Run Code Online (Sandbox Code Playgroud)
,Main.java:
public class Main {
public static void main(String[] args) {
System.out.println(User.find(1));
}
}
Run Code Online (Sandbox Code Playgroud)
,blackMagicMethod:
public Object blackMagicMethod(Class clazz, int id) {}
Run Code Online (Sandbox Code Playgroud)
该行blackMagicMethod(T.class, id)不起作用,就像从Java中的静态方法获取类名中描述的任何黑客一样.
如何使此代码正常工作?
aio*_*obe 10
泛型类在运行时不可用,即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;
}
}
Run Code Online (Sandbox Code Playgroud)