[英]Runtime Generic Type Java
假设我有:
ClassA extends SuperClass{ ...}
ClassB extends SuperClass{ ... }
同样ClassX<T extends SuperClass> { ... }
现在,在运行时,我遇到了一个对象,该对象应该是ClassA或ClassB之一。 我想基于此创建ClassX的实例。 我怎样才能做到这一点?
我努力了:
Class<?> className = object.getClass();
Class<className> objectx = ...
这不起作用。
提前致谢!
ClassX<SuperClass> myObj = new ClassX<SuperClass>();
您只是说一个泛型类,您可以在该类中拥有一个值,即该泛型类型
ClassX<T extends SuperClass>{
public T value; // its just public so i dont need a setter
}
现在可以执行以下操作:theObjectThatIsAOrB = xy.get()//现在得到的对象是ClassA或ClassB
ClassX<SuperClass> myObj = new ClassX<SuperClass>();
myOjb.value = theObjectThatIsAOrB;
这是不可能的,因为这没有意义。 想一想,如果您能做到这一点,它将有什么好处? 类型参数的唯一目的是在编译时进行类型检查。 因此,如果您有一个在编译时不知道的类型参数,它就不能进行类型检查,并且它什么也做不了。 因此,将type参数放在第一位是没有意义的。 (使用通配符没有什么不同。)
如果编译器可以确定涉及到A或B,则只需使用new。
public <T extends SuperClass> ClassX <T> makeClassXInstance( T aOrB ) {
return new ClassX<T>();
}
另一方面,如果您要在运行时确定类,则可能会发生这种情况。 但是您遇到了变量类型问题。 Java很烂地解决了它。
public <T extends SuperClass> ClassX <T> makeClassXInstance( T aOrB ) {
return new ClassX<T>( aOrB.getClass() );
}
public class ClassX<T>{
public ClassX( Class<T> cls ) {...}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.