簡體   English   中英

Java 泛型類型非靜態方法返回 Object 而不是泛型類型 T

[英]Java Generic Type non-static method return Object instead of generic type T

public class Module<T> {

    @SuppressWarnings("unchecked")
    public <T> T module(Class<T> clazz) {
        return clazz.cast(this);
    }
        
}

這是我的模塊的基礎 class,我想通過調用上面的模塊方法將其初始化為 TestModule。

TestingModule testingModule = new Module().module(TestingModule.class);

但是,返回類型

新模塊().module(TestingModule.class)

是 Object 而不是 TestingModule。 有沒有什么想法可以直接初始化它而不使用任何轉換或將方法更改為static

有幾個問題。 與類型不匹配錯誤最直接相關的一個是:

TestingModule testingModule = new Module().module(TestingModule.class);

new Module()使用Module沒有任何類型參數。 當您使用這樣的原始類型時,您會丟失表達式中的所有通用信息。 您可以簡單地通過添加類型參數來修復它:

TestingModule testingModule = new Module<String>().module(TestingModule.class);

在上面的代碼中,我在構造函數調用中添加了<String> ,從而解決了問題。 但是在這種情況下, String是一個很奇怪的類型參數,這導致了下面的旁注。

聲明public <T> T module(Class<T> clazz)添加了一個類型變量T ,它隱藏了同名的類級別類型變量。 如果這個方法不是偶然的,請給這個變量使用一個不同的名字,然后使用它 否則,此方法不需要是通用的。

暫無
暫無

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

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