2013-05-19 8 views
10

Mi chiedevo se è possibile avere qualcosa di simile:E 'possibile avere una quantità variabile di tipi di elemento in una classe generica Java

public class foo<T...> 

modo da poter chiamare la classe come

Foo<Object0> 
Foo<Object0, Object1> 
Foo<Object0, Object1, Object2> 

Con oggetto 0, 1 e 2 diversi tipi, come numero intero, virgola mobile, stringa e così via. È possibile o dovrei scrivere una lezione per ogni lunghezza di tipi generici? Se ciò fosse possibile, come gestirò i diversi tipi?

+0

Perché ne avresti bisogno? O è solo curiosità? –

+4

@pivovarit Per un tipo 'Tuple' per esempio, o per un tipo' Callable' con firma regolabile. –

+1

@pivovarit l'ovvio esempio che posso pensare sarebbe classi di tipi generici. che detto non è possibile, scala ad esempio ha versioni di tale classe per un massimo di 15 argomenti. Peccato sì – Voo

risposta

5

No, non puoi averlo. Il meglio che puoi fare è public class Foo<T extends SomeClassOrInterface>. Quindi nel tuo esempio con Integer e Float puoi definire public class Foo<T extends Number>.

È anche possibile specificare che T deve implementare più di un'interfaccia.

La sintassi public class Foo<T extends SomeInterface1 & SomeInterface2> è valida, con & che significa AND.

Sfortunatamente la sintassi public class Foo<T extends SomeInterface1 | SomeInterface2> con | significato OR non è possibile.

3

Una classe generica è definita con il seguente formato:

class name<T1, T2, ..., Tn> { /* ... */ } 

È necessario specificare i parametri di tipo T1, T2 e Tn. Pertanto, class name<T...> non è possibile.

1

Stai parlando di un parametro generico varargs.

No, non è possibile. In gran parte perché non ci sarebbe alcun modo di fare riferimento ai tipi, a meno che non si sia utilizzato un indirizzo di array, come T[0] ecc., Che non è supportato.

Problemi correlati