gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:18:17 24 4
gpt4 key购买 nike

我正在尝试重构一个类和一组子类,其中 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>> {

K 和 V 的类型将从 M 的定义中推断出来。

最佳答案

问题是 KV 并不是真正的“重复”,至少不会比变量声明和使用同一个变量“重复”重复”。

思考的方式是声明泛型类型 KV,然后在泛型类型的定义中使用那些声明的泛型类型 M。因此,您不会多次声明泛型类型 KV:相反,您对它们分别声明一次,然后在其他内容的声明中引用它们.

换个角度来看,这里泛型的数量还是三个,分别是KVMM 恰好是根据 KV 定义的,但您不必定义 M方式。


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

关于java - 从扩展泛型中提取泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com