簡體   English   中英

如何創建泛型?

[英]How to create generic type?

我定義了一個這樣的類:

public class MyClass<T implements MyInterface> {
    public T getMy() {
        return new T();
    }
}

這不會編譯。 我不允許創建通用類型T。

我該如何解決? 有什么好的模式可以做到這一點嗎? 我可以通過使用抽象類而不是接口來解決此問題嗎? 我必須使用反射嗎?

您不能在此處使用implements

<T implements MyInterface> // can't use interface.

所以你可以在那里使用Abstract Class

<T extends MyAbstractClass>
public class MyClass<T extends MyInterface> {

   T getMy(Class<T> clazz) throws InstantiationException, IllegalAccessException
    {
        return clazz.newInstance();
    }
}

您可以通過傳遞實際的類類型(例如,傳遞給構造函數), Class<T>並在默認構造函數確定的情況下對其調用newInstance()來實現。 如果需要另一個構造函數,則需要使用反射API,例如,通過此類類型對象上的getDeclaredConstructors()

這里有幾個問題。

  • 您創建有界的泛型類型的語法不正確; 您需要使用extends關鍵字。 extends這個意義上來說, extends關鍵字更通用 ,因為它用來表示泛型類型可以擴展另一個類或實現一個接口。

  • 您不能直接實例化泛型類型。 這是一種更笨拙的方式(實際上沒有反射),這是此Stack Overflow答案提供的

     public T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException { return clazz.newInstance(); } 

暫無
暫無

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

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