因此,我正在学习Java类,我们获得的一项分配涉及抽象数据类型(ADT)。在本次分配中,我们应该通过一个称为LinkedStack的类实现一个称为Stack的ADT。 LinkedStack具有一个构造函数,但是在我的教授为我们提供的测试案例中,新的LinkedStack对象可以创建新的LinkedList对象或新的ArrayList对象。我的问题是,无论我如何定义参数,我仍然会收到一条错误消息,指出该参数与类不兼容。
我已经尝试了逻辑测试,以查看参数是被称为LinkedList还是ArrayList,我认为这是一件好事,但我不知道如何正确分配该参数。
我已经尝试将参数设置为Stack,然后转换为LinkedStack,并且私有最终变量的类型为“ Stack”,我也尝试将参数称为List,但是我似乎无法摆脱使我无法开始编译过程的错误。
这是我们的开始:
interface Stack {
public void push(Object d){
}
public Object pop(){
}
public Object peek(){
}
public boolean isEmpty(){
}
}
public class ListStack implements Stack{
public ListStack(/*argument*/){
}
}
//Separate test case file
//example of the test cases
public void peekTest1() {
Stack q = new ListStack(new LinkedList());
// assertion cases follow
}
public void peekTest2() {
Stack q = new ListStack(new ArrayList());
// assertion cases follow
}
如果您寻找可用于/*argument*/
的类型,则可以这样操作:
public class ListStack implements Stack {
public ListStack(List list) {
}
/* note that you must implement all methods from the interface */
}
为什么使用类型List
? List
是通用接口,由LinkedList
和ArrayList
实现。因此,您可以在构造函数中使用它们之一。
注意:您不应使用原始类型。 List
和实现此接口的类具有类型参数。如果可能,您应该使用List<String>
或List<T>
之类的东西。但是也许,您将在以后的课程中学习。