Почему вы не можете обобщить параметрические классы?

Когда вы определяете параметрические классы, вы можете использовать только фиксированное количество параметров.

class Container<T> {
    ...
}

Однако, если вы хотите создать, скажем, карту с несколькими значениями. Вы должны использовать Map<K, List<V>> вместо Map<K, V1, V2, V3>. Почему вы не можете определить что-то вроде?

class Map<K, V, ...> {
    ...
}

person Community    schedule 25.05.2020    source источник
comment
Прежде всего, потому что Map принимает ключ и значение. То, что вы описываете, не похоже на Map.   -  person Federico klez Culloca    schedule 25.05.2020
comment
Кроме того, как бы вы его использовали? Даже если бы вам разрешили SomeClass<T1, T2 ... TN>, вы вряд ли сможете создавать поля T1 t1; T2 t2; ... TN tn;   -  person user    schedule 25.05.2020


Ответы (1)


Можно, если реализовать класс Tuple с 3 элементами.

class Tuple3<T1, T2, T3> {
    private final T1 t1;
    private final T2 t2;
    private final T3 t3;

    // constructor, getters, ...
}

Тогда вы можете использовать это:

Map<K, Tuple3<V1, V2, V3>>

Map не несет ответственности за поддержку нескольких типов значений. См. разделение проблем (SoC) для получения дополнительной информации по этой теме.

person Andreas    schedule 25.05.2020