Java 如何在Android上的泛型类内部创建自定义类型的实例?

Java 如何在Android上的泛型类内部创建自定义类型的实例?,java,android,generics,typetoken,Java,Android,Generics,Typetoken,我正在处理一个泛型类,它将远程获取数据并将其转换为指定类型的对象 以下是示例代码: class A { int a; } class B extends A { int b; } class GA<T extends A> { private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {}; T create() throws Instantia

我正在处理一个泛型类,它将远程获取数据并将其转换为指定类型的对象

以下是示例代码:

class A {
    int a;
}

class B extends A {
    int b;
}

class GA<T extends A> {
    private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {};

    T create() throws InstantiationException, IllegalAccessException {
        T obj = (T) typeToken.getRawType().newInstance(); // I expect to get an instance of B. But it's of type A.
        return obj; // the return will throw type cast exception
    }

    T create(Class<T> clazz) throws InstantiationException, IllegalAccessException {
        T obj = clazz.newInstance(); // this create B as expected. But the interface looks a little strange and unsafe
        return obj;
    }
}
A类{
INTA;
}
B类扩展了A类{
int b;
}
GA类{
private final-TypeToken-TypeToken=new-TypeToken(getClass()){};
T create()抛出实例化异常,IllegalAccessException{
T obj=(T)typeToken.getRawType().newInstance();//我希望得到一个B的实例,但它是A类型的。
return obj;//返回将抛出类型转换异常
}
T create(Class clazz)抛出实例化异常,IllegalAccessException{
T obj=clazz.newInstance();//这将按预期创建B。但是接口看起来有点奇怪和不安全
返回obj;
}
}
对于以下代码:

GA<B> ga = new GA<>();
try {
    B b1 = ga.create();
    B b2 = new GA<B>().create(B.class); // the extra parameter makes the interface strange as we need specify B twice
} catch (Exception e) {
    e.printStackTrace();
}
GA=newga();
试一试{
B b1=ga.create();
b2=new GA().create(B.class);//额外的参数使接口变得奇怪,因为我们需要指定B两次
}捕获(例外e){
e、 printStackTrace();
}
我尝试在内部获取B的对象,但它只能通过create()为我提供A的对象。而另一个接口create(Class clazz)看起来有点奇怪


我的方法有问题吗?或者可能吗?

由于擦除的原因,您不能一般地创建类型令牌,至少不能创建捕获呼叫站点类型的类型令牌。