小编典典

从扩展泛型中提取泛型类型

java

我正在尝试重构M类型确实扩展了任何内容的类和子类集,即使我们知道它必须是某种类型的子类也是如此。该类型已参数化,我希望其参数化类型可用于已经具有M值的子类。

有什么方法可以定义此类,而不必在参数列表中包括冗余的K和V泛型类型。我希望能够使编译器从子类映射到的M中推断出它们。

public abstract class NewParametrized<K, V, M extends SomeParametrized<K, V>> {

    public void someMethodThatTakesKAndV(K k1, V v1) { }
}

换句话说,我希望类声明看起来像这样:

 public class NewParametrized<M extends SomeParametrized<K, V>> {

从M的定义可以推断出K和V的类型。


阅读 216

收藏
2020-10-16

共1个答案

小编典典

问题在于,它们KV没有真正地被“重复”,至少不多于一个变量声明,并且使用同一变量就是“重复”。

想到这一点的方式是,你声明泛型类型KV,然后使用那些在泛型类型的定义中声明泛型类型M。因此,您无需声明泛型类型KV一次以上的声明:相反,您只需声明一次它们,然后在其他声明中引用它们。

看看它的另一种方式,一般类型的数量在这里仍然是三种,即KVMM恰好在来定义KV,但是你没有定义M的方式。


我应该补充一点,如果您是类型推断的支持者,则可以将声明和相同变量的使用视为不必要的重复。但是,如果您习惯于使用Java(或C,C
++或许多其他语言)进行编程,则可能习惯于在使用变量之前声明变量。

2020-10-16