代码之家  ›  专栏  ›  技术社区  ›  Brigham

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

  •  3
  • Brigham  · 技术社区  · 16 年前

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

    2 回复  |  直到 16 年前
        1
  •  6
  •   Joe Carnahan    16 年前

    问题是 K 和 V 不是真正的“重复”,至少不超过一个变量声明,使用同一个变量就是“重复”。

    K 和 ,然后在泛型类型的定义中使用这些声明的泛型类型 M . 所以,不声明泛型类型 v 不止一次:相反,你每一个都声明一次,然后在声明其他东西时引用它们。

    K , v M M K v ,但你不必定义 往那边走。


    type inference

        2
  •  2
  •   Santi P.    16 年前

    如果可能的话

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

    如果在同一个包中定义了K或V类,则不可能知道它是类型变量还是对具体类的引用。