2016-10-27 28 views
0

你如何創建一個泛型類/方法,除了類型列表中的泛型類型?這是我想要的僞代碼:如何在一組類型中使用通配符類型創建通用方法?

class Foo { 
    Object arrayOfTypes[] = {Integer, Double, Boolean}; 

    public <T in arrayOfTypes> void Bar() { 
     ... 
    } 
} 

因此,T必須是整數,雙精度或布爾值。此外,唯一可以使用的類是從庫中讀取的,所以我不能編輯它們來擴展某些類並執行類似<T extends Car>的操作。有沒有辦法做到這一點?

+0

這是不可能的。泛型只是在編譯時進行健全性檢查。它們在運行時不存在,所以代碼對JVM沒有意義。你能解釋你想要完成什麼嗎?這可能是超載的方法可以解決問題。 – 4castle

回答

1

您的要求對泛型沒有意義。如果你想有一個方法,接受類型和這些類型之一的變量不共享一個共同的超類或實現一個共同的接口(除延長Object),你應該做的:

public void bar(TypeOne t) { /*...*/ } 

public void bar(TypeTwo t) { /*...*/ } 

public void bar(TypeThree t) { /*...*/ } 

通過趁勢超載。如果你的3種類型沒有什麼共同之處,那麼無論如何單個方法都不能容納所有的方法(有或沒有泛型)。


因爲4castle在評論前幾分鐘就說過同樣的話,所以我覺得我需要再多一點。

當你的類型之間有共同之處時,通用的方法會有意義。假設您的所有類型都實現了一個名爲Common的公共接口,該接口聲明瞭一個方法String do(int i)。然後你可以寫一個方法

public void <T extends Common> bar(T instance) { 

    String result = instance.do(3); 
    //... 
} 
相關問題