[英]Dynamic Casting in Java with Variable Class Name
如果我有一個需要轉換為Class的變量方法param,那么如何動態實現轉換? 我將如何聲明變量result
?
顯然這是錯誤的,
public void test(Class destinationClass)
{
(destinationClass)result = (destinationClass)getObject();
}
注意:getObject()返回可轉換為Destination Class的對象。 Destination Class對象是getObject()的子級。
public <T> void test(Class<T> destinationClass) {
T result = destinationClass.cast(getObject());
...
}
如果要動態創建對象,則可以使用反射(當在編譯時不知道確切類型時,這很有用)
public <T> T getObj(Class<T> target){
T obj= target.getConstructor().newInstance();
return obj;
}
這假定目標類具有一個無參數的構造函數,但是您會看到該模式。
通用方法就是這種情況。
class MyObject {
private Object obj;
public void setObject(Object o) {
this.obj = o;
}
public <T>T getObject() { //notice return type
return (T) obj; //and cast
}
}
然后,只需使用此代碼運行它,看看它能做什么。
MyObject o = new MyObject();
o.setObject("Hello World!");
String s = o.getObject();
System.out.println(s);
o.setObject(1000);
Integer i = o.getObject();
System.out.println(i);
s = o.getObject(); //will throw exception because the object is an integer
//can also use this to specify return type
o.<Integer>getObject();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.