2013-05-19 13 views
10

Zastanawiałem się, czy możliwe jest, aby mieć coś takiego:Czy to możliwe, aby mieć zmienną ilość typów elementów w java klasy generycznej

public class foo<T...> 

tak można nazwać klasę jak

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

Z obiektami 0, 1 i 2 różnymi typami, takimi jak liczba całkowita, liczba zmiennopozycyjna, łańcuch itd. Czy to możliwe, czy też musiałbym napisać klasę dla każdej długości rodzajów ogólnych? Gdyby to było możliwe, w jaki sposób poradziłbym sobie z różnymi typami?

+0

Po co ci to potrzebne? A może to tylko ciekawość? –

+4

@pivovarit Dla typu 'Tuple' na przykład lub dla typu' Callable' z regulowanym podpisem. –

+1

@pivovarit oczywistym przykładem, który mogę myśleć, byłoby ogólne klasy typów. powiedziane, że nie jest to możliwe, scala na przykład ma wersje takiej klasy na maksymalnie 15 argumentów. Szkoda tak – Voo

Odpowiedz

5

Nie, nie możesz tego mieć. Najlepsze, co możesz zrobić, to public class Foo<T extends SomeClassOrInterface>. Tak więc w twoim przykładzie z Integer i Float możesz zdefiniować public class Foo<T extends Number>.

Można również określić, że T musi implementować więcej niż jeden interfejs.

Poprawna jest składnia public class Foo<T extends SomeInterface1 & SomeInterface2>, z & co oznacza AND.

Niestety składnia public class Foo<T extends SomeInterface1 | SomeInterface2> z | oznacza OR nie jest możliwe.

3

Ogólny klasa jest zdefiniowana w następującym formacie:

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

Musisz określić parametry typu T1, T2 i TN. Dlatego class name<T...> nie jest możliwe.

1

Mówi się o parametrze generycznym varargs.

Nie, nie możesz. Głównie dlatego, że nie ma możliwości odniesienia do typów, chyba że użyłeś adresu tablicy, np. T[0] itd., Który nie jest obsługiwany.

Powiązane problemy