Getting class name from common static method in Java

I have a code:

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) {} 

The blackMagicMethod(T.class, id) does not work, like any hacks described in Getting the class name from a static method in Java .

How can I make this code work?

+4
source share
1 answer

The generic type class is not available at run time, i.e. T.class doesn't make sense.

Generic types are translated to Object at compilation time. This is called Type Erasure .

If you really need a class type argument, you need to add this as an argument:

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

Source: https://habr.com/ru/post/1396224/


All Articles