簡體   English   中英

Java中具有可變類名的動態轉換

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM