簡體   English   中英

Java使用在運行時獲取的類型參數創建通用實例

[英]Java create generic instance with type parameter obtained at runtime

我有一個這樣的課:

public class Pojo<T, P> {}

我在編譯時知道T的類型,但我不知道P.的類型。我想知道這樣的事情是否可行:

Class<Integer> t = Integer.class;
field = new Pojo<Integer, t>();

如果沒有,問題的任何替代解決方案都是有效的;)

編輯:我正在嘗試從POJO字段獲取統計數據,即我有一個類AirRegister與字段station,o3,so2,altitude,latitude ...我想獲得這些字段的模式。 用戶可以向程序發送任何具有任何字段類型的類型,因此直到運行時字段類型未知。

例:

public static void main(String[] args) {
    String field = args[0];
    Class<fieldType> type = AirRegister.class.getDeclaredField(field).getClass();
    ModeImpl<AirRegister, type> p = new ModeImpl<AirRegister, type>();
}

這不可能。 泛型是僅編譯時功能。 編譯器使用它們來對源代碼進行類型檢查,但在運行時它們已經消失了。

如果需要實現運行時類型檢查,可以使用Class實例來存儲所需的類型。 例如:

class Pojo<T> {
    private Class<?> clazz;
    Pojo(Class<?> clazz) {
        this.clazz = clazz;
    }
    void doSomething(T arg1, Object arg2) {
        if (!clazz.isInstance(arg2)) {
            throw new ClassCastException();
        }
        ...
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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