Возможно ли иметь переменное количество типов элементов в классе java generic
Мне было интересно, возможно ли иметь что-то вроде этого:
public class foo<T...>
чтобы вы могли вызвать класс, например
Foo<Object0>
Foo<Object0, Object1>
Foo<Object0, Object1, Object2>
С объектами 0, 1 и 2 разными типами, такими как Integer, Float, String и т.д. Возможно ли это, или мне нужно написать класс для каждой длины родовых типов? Если бы это было возможно, как бы я обрабатывал разные типы?
Ответы
Ответ 1
Нет, вы не можете этого сделать. Лучшее, что вы можете сделать, это public class Foo<T extends SomeClassOrInterface>
. Поэтому в вашем примере с Integer
и Float
вы можете определить public class Foo<T extends Number>
.
Вы также можете указать, что T должен реализовывать более одного интерфейса.
Синтаксис public class Foo<T extends SomeInterface1 & SomeInterface2>
действителен, а &
означает AND
.
К сожалению, синтаксис public class Foo<T extends SomeInterface1 | SomeInterface2>
с |
, означающий OR
, невозможен.
Ответ 2
Общий класс определяется в следующем формате:
class name<T1, T2, ..., Tn> { /* ... */ }
Вы должны указать параметры типа T1, T2 и Tn.
Поэтому class name<T...>
невозможно.
Ответ 3
Вы говорите об varargs общем параметре.
Нет, вы не можете. Во многом потому, что не было способа ссылаться на типы, если вы не использовали адрес массива, например T[0]
и т.д., Который не поддерживается.