簡體   English   中英

在運行時使用類對象定義泛型類型

[英]Define a generic type with a class object at runtime

是否可以使用類對象聲明泛型的類型?

例如,我想做這樣的事情:

Class returnType = theMethod.getReturnType();

AttributeComponent<returnType> attComponent;

attComponent = new AttributeComponent<returnType>(returnType, attName);
attributeComponents.put(methodName.substring(3), attComponent);

現在我知道這顯然是不正確的,但是有沒有辦法實現呢?

編輯:解釋一點

我正在使用反射遍歷所有吸氣劑,然后為每個屬性生成一個UI元素(AttributeComponent類,該類具有JComponent元素和JLabel)。 我想使用泛型來創建一個getValue()方法,該方法將返回屬性類型的對象。

我不知道是否有一種方法可以編譯這樣的東西,但是它沒有什么價值。

考慮到類型擦除 ,編譯后的類不使用泛型信息。 也就是說,執行Set<String> a = new Set<String>(); 對於檢查中使用的有用的a不能在運行時在編譯時間,但。

因此,您想實例化一個泛型,其類型只會在運行時知道,而在運行時將不會使用。

我可以說這可以通過將方法返回類型定義為泛型來實現。 但您需要將實際類型作為類參數傳遞,才能像顯示的那樣使用它:

<T> T yourMethod(Class<T> returnType) {
    // use <T> as generic and returnType to refer to the actual T class
    /* ... */ new AttributeComponent<T>(returnType, attName);
}

查看更大范圍的上下文對於您嘗試執行的操作也很有用。 如果您希望AttributeComponent.getValue()返回某個泛型T (方法返回類型),那將是完全沒有用的,除非您在編譯時知道每種方法的返回類型,否則T只會是Object 在上面的示例中,您使用一個yourMethod的類調用yourMethod ,並且將返回相同的類型(或該類型的AttributeComponent或其他類型)。

暫無
暫無

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

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