Возможно ли иметь переменное количество типов элементов в классе 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] и т.д., Который не поддерживается.