【问题标题】:Missing type arguments for generic class泛型类缺少类型参数
【发布时间】:2015-09-30 15:15:24
【问题描述】:

使用具有抽象类A 和接口IJ 的库,当我扩展/实现类/接口时收到以下警告消息:

泛型类 J 缺少类型参数。

作为MWE,类如下(T和S是泛型类型参数):

public abstract class A {}

public interface I<T extends A> {
    public <S extends T> void doStuff(J<? super S> param);
}

public interface J<T extends A> {
    public void doOtherStuff();
}

这是我的课程:

public class AExtended extends A {}

public class IImplemented implements I<AExtended> {
    @Override
    public void doStuff(J param) {}
}

如下明确使用AExtended 类不能正确实现I 中的doStuff():

public class IImplemented implements I<AExtended> {
    @Override
    public void doStuff(J<AExtended> param) {}
}

【问题讨论】:

    标签: java generics


    【解决方案1】:

    您没有在IImplemented 中覆盖doStuff,因为该方法不是通用的并且类型边界不存在。这个版本的doStuff 应该适合你:

    public <S extends AExtended> void doStuff(J<? super S> param) {}
    

    请注意,由于I 的类型是AExtended,因此此处使用得当,并且还包括J 的通配符类型的下限。

    【讨论】:

      【解决方案2】:

      尝试:

      public class IImplemented implements I<AExtended> {
         @Override
         public <S extends AExtended> void doStuff(J<? super S> param) {
            // ...
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-21
        • 2021-10-18
        • 1970-01-01
        • 2016-06-13
        • 2011-12-29
        • 2017-10-30
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多