【问题标题】:Why can't you generalize parametric classes?为什么不能泛化参数类?
【发布时间】:2020-05-25 19:07:55
【问题描述】:

当您定义参数类时,您只能使用固定数量的参数。

class Container<T> {
    ...
}

但是,如果您想创建一个具有多个值的 Map。您必须使用Map&lt;K, List&lt;V&gt;&gt; 而不是Map&lt;K, V1, V2, V3&gt;为什么不能定义类似的东西?

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

【问题讨论】:

  • 首先,因为Map 需要一个键和一个值。您所描述的内容看起来不像是Map
  • 另外,你会如何使用它?即使允许你做SomeClass&lt;T1, T2 ... TN&gt;,你也很难生成字段T1 t1; T2 t2; ... TN tn;

标签: java parameters parametric-polymorphism


【解决方案1】:

如果你实现了一个包含 3 个元素的 Tuple 类,你可以。

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 不负责支持多种类型的。有关该主题的更多信息,请参阅separation of concerns (SoC)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多