2013-10-18 218 views
1

我不知道這是可能的,但如果是這樣,這將有助於我很多:Java的泛型和類型

考慮:

public interface Foo<T> { 

    public void onUpdate(T t); 
} 

如果我有一個類的實例實現Foo是否有可能獲得泛型類型?

public void someMethod(byte[] bytes) { 
    /* 
    * this.bar implements Foo<ExampleType> 
    * 
    * I want to convert bytes to ExampleType using GSON but don't know the type. 
    * 
    * this.bar.onUpdate(...) 
    */ 
} 

是否有可能,我讓創造this.bar實例時使用的泛型類型?

+5

簡答題,沒有。如果你需要這個類型,你可以添加'Class clazz'作爲'someMethod'的參數。 – chrylis

+0

@chrylis我不這麼認爲。我知道你在說什麼,但方法是在界面中定義的... – jjNford

+0

@chrylis是的我看過這個......但也有很多其他人都有不同的迴應。如果這沒有吸引任何牽引力,我會刪除這篇文章。 – jjNford

回答

2

您無法獲得Java中的泛型類型,由於類型擦除,該信息在運行時不可用。

你可以有具體的類型,如獨立的接口,

interface FooExampleType extends Foo<ExampleType>{ 

} 

此外,我想指出的是,泛型化的界面,如果你覺得有必要讓一般的參數的類型,然後有後你的代碼的設計有問題。如果你在你的代碼中遵循適當的多態行爲,那麼在通過基因化之後,你不應該感到需要獲得類型。

+0

設計很好。它是一個抽象的網絡包裝器(在庫項目中),數據需要轉換爲Generic類型參數。應用程序定義了這種通用類型。我需要用於GSON轉換的通用類型令牌。 – jjNford