1

我正在学习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> */

请注意,字母也是老师给出的,并且有签名:

public class Alphabet implements C { ... }

有人可以通过一些解释帮助指出我的错误在哪里吗?

问候。

4

2 回答 2

5

这里的问题是接口(T)中的类型必须扩展 C,因此您说它必须从 C 继承。在您提供实现的类中,您没有对参数 T 的类型指定任何界限。关键是第一个示例中的 T 与第二个示例中的 T 不同,因此您必须再次指定边界。以下代码应该解决您的边界问题。

界面:

public interface A<T extends C> { ... }

实施:

public class AImpl<T extends C> implements A<T> { /*Bound mismatch error*/ ... }
于 2013-02-24T15:32:33.787 回答
2

为避免此问题,请AImpl确保声明,该泛型类型将扩展C

public class AImpl<T extends C> implements A<T> { }
于 2013-02-24T15:36:01.910 回答