2016-03-13 33 views
2

是否可以在類定義中添加可變數量的通用參數?通用類定義中的變長類型參數

例:

public class Test<E,T,U...> 

和通用參數的確切人數,同時建立對象的實例來定義。

+0

你試過了嗎? –

+0

你是什麼意思我的不準確? – munk

+0

我的意思是我不知道通用參數的確切數量。這取決於實際情況。 – gkanellis

回答

0

在java中似乎不可能定義類型簽名的重載,但在C#中有可能可能是因爲類型的擴展的。也許這是一個選項...

class Test<A,B> { } 
class Test<A> { } 

public class Program 
{ 
    public static void Main() 
    { 
     var one = new Test<string>(); 
     var two = new Test<string, int>(); 
    } 
} 

在這裏,你重載型Test的簽名採取任何你會用方法重載做同樣的方式一個或兩個類型參數。 Here is a fiddle for that

不幸的是,你將不得不爲所有的變體創建幾個類型,而不是通過變量參數列表來定義它。

+0

Oooh ..yeah ..overload似乎是一個很好的解.. – gkanellis

0

沒有,是不可能的,你可以做的是以下幾點:

定義本身並沒有帶來前進的類時定義vararg構造

public class Deyen<T, G, M> { 

    private final T typo; 
    private final G typo22; 
    private final M[] typo3; 

    public Deyen(T typo, G typo22, M... typo3) { 
     this.typo = typo; 
     this.typo22 = typo22; 
     this.typo3 = typo3; 
    } 
} 

明確定義的一般,但允許varargs編譯器...

+0

哦,我明白了。不幸的是:(非常感謝! – gkanellis

0

顯然你希望能夠使可變參數的可變參數形式的不同類型的多個參數。

VarArgs實際上是作爲一個數組傳遞的,但是你不能擁有一個包含不同類型對象的數組。

但是,我們不能取而代之採用單個參數,並且該參數類型保存每個需要使用的單個「參數」。

class TypedInstance<T>{ 
    Class<T> type; 
    T instance; 
} 

或者

不同類別的每一組要使用的參數。然後,只需將該類作爲參數傳遞即可。

class MultiTypedInstanceType1<T, R>{ 
    public R doSomething(T t){ .... } 
} 

class MultiTypedInstanceType2<T, R, P>{ 
    public R doSomething(T t, P p){ .... } 
} 
+0

是的,這就是我剛剛發現的。 – gkanellis

+0

後者是用於java8'Function'接口的相同方法,不是嗎? –

相關問題