我正在学习Java,我必须创建一个程序来实现由教师定义的接口以实现ADT(使用ArrayList)。我得到的错误是我不明白的,也许新的解释可以帮助我。
界面:
public interface A<T extends C> { ... }
错误的类签名:
public class AImpl<T> implements A<T> { /*Bound mismatch error*/ ... }
JUnit测试类
//Declaration
A<Alphabet> alphaList;
//in setUp()
alphaList = new AImpl<Alphabet>;
// in one method
alphaList.size(); /* The method size() is undefined for the type A<Alphabet> */
请注意,Alphabet也是由老师给出的,并且有签名:
public class Alphabet implements C { ... }
有人可以通过一些解释帮助指出我的错误在哪里吗?
问候。
答案 0 :(得分:5)
这里的问题是接口(T)中的Type绑定扩展C,因此你说它必须从C继承。在给出实现的类中,你没有指定Type的任何边界参数T.关键是第一个例子中的T与第二个例子中的T不同,因此你必须再次指定边界。以下代码应解决您的边界问题。
接口:
public interface A<T extends C> { ... }
Implemtation:
public class AImpl<T extends C> implements A<T> { /*Bound mismatch error*/ ... }
答案 1 :(得分:2)
为避免此问题,请确保AImpl
声明,该泛型类型会扩展C
:
public class AImpl<T extends C> implements A<T> { }