[英]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.