【问题标题】:One constructor with one argument that creates two different objects一个构造函数,一个参数,创建两个不同的对象
【发布时间】:2020-02-08 02:50:11
【问题描述】:

所以我正在学习 Java 课程,我们被分配的任务之一涉及抽象数据类型 (ADT)。在这个作业中,我们应该通过一个名为 LinkedStack 的类来实现一个名为 Stack 的 ADT。 LinkedStack 有一个构造函数,但在我的教授提供给我们的测试用例中,一个新的 LinkedStack 对象可以创建一个新的 LinkedList 对象或一个新的 ArrayList 对象。我的问题是,无论我如何定义我的论点,我仍然会收到一个错误,指出该论点与类不兼容。

我尝试了一个逻辑测试来查看参数是被称为 LinkedList 还是 ArrayList,我认为这是一件好事,但我无法弄清楚如何正确分配参数。

我尝试将参数设置为 Stack,然后强制转换为 LinkedStack,其中私有 final 变量的类型为“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 */ 位声明为List? (LinkedListArrayList 都实现了这个接口。)
  • @user2478398 我想我做到了,但我可以再试一次。也许我第一次错过了一些东西

标签: java arraylist linked-list stack


【解决方案1】:

如果您寻找可用于/*argument*/ 的类型,您可以这样做:

public class ListStack implements Stack {
  public ListStack(List list) {
  }
  /* note that you must implement all methods from the interface */
}

为什么使用类型ListList 是公共接口,由LinkedListArrayList 实现。所以你可以在构造函数中使用其中之一。

注意:您不应该使用原始类型。 List 和实现这个接口的类都有一个类型参数。如果可能,您应该使用List<String>List<T> 之类的东西。但也许,你会在后面的课程中学到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2017-05-24
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 2023-02-10
    • 2012-07-06
    相关资源
    最近更新 更多