我正在尝试重构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的类型。
问题在于,它们K并V没有真正地被“重复”,至少不多于一个变量声明,并且使用同一变量就是“重复”。
K
V
想到这一点的方式是,你声明泛型类型K和V,然后使用那些在泛型类型的定义中声明泛型类型M。因此,您无需声明泛型类型K或V一次以上的声明:相反,您只需声明一次它们,然后在其他声明中引用它们。
M
看看它的另一种方式,一般类型的数量在这里仍然是三种,即K,V和M。 M恰好在来定义K和V,但是你没有定义M的方式。
我应该补充一点,如果您是类型推断的支持者,则可以将声明和相同变量的使用视为不必要的重复。但是,如果您习惯于使用Java(或C,C ++或许多其他语言)进行编程,则可能习惯于在使用变量之前声明变量。