使用具有抽象类A
和接口I
和J
的库,当我扩展/实现类/接口时,我收到以下警告消息:
缺少泛型类J< T>的类型参数。
作为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) {}
}
答案 0 :(得分:2)
尝试:
public class IImplemented implements I<AExtended> {
@Override
public <S extends AExtended> void doStuff(J<? super S> param) {
// ...
}
}
答案 1 :(得分:2)
您未在doStuff
覆盖IImplemented
,因为该方法不是通用的,并且类型边界不存在。此版本的doStuff
应该适合您:
public <S extends AExtended> void doStuff(J<? super S> param) {}
请注意,由于I
的类型为AExtended
,因此在此处使用它,并且还包括J
的通配符类型的下限。