有没有办法绕过Java中的类型擦除?

时间:2015-08-28 21:04:13

标签: java generics type-erasure

我想知道在SO上的Java神是否有任何技巧可以分享如何进行以下工作

public class MyClass<T> {

   public List<T> getMyList(Class1 a, String, b) {
        Generic1<Generic2<T>, Class1> x = new Generic3<T>();
        x.doSomething();
        // this compiles but x doesn't work correctly since (of course) T is now type "Object"
   }
}

//... calling it like this:
MyClass<MyType> c = new MyClass<>();

对象&#34; x&#34;为了完成它的工作,它需要知道T的类型是什么。 Generic1,Generic2和Generic3不是我写的类。但有没有办法传达类型信息,以便它们可以工作?比方说,如果我在运行时传入类型的类?

感谢。

1 个答案:

答案 0 :(得分:-1)

传递Class<T>个对象并使用.newInstance()代替new

public class MyClass<T> {
    private final Class<T> clazz;

    public MyClass(final Class<T> clazz)
        { this.clazz = clazz; }

    public List<T> getMyList(Class1 a, String, b) {
        Generic1<Generic2<T>, Class1> x = this.clazz.newInstance();
        x.doSomething();
    }
}

//... calling it like this:
MyClass<MyType> c = new MyClass<>(MyType.class);