Один конструктор с одним аргументом, который создает два разных объекта - PullRequest
0 голосов
/ 10 октября 2019

Итак, я беру Java-класс, и одно из заданий, которое нам было дано, касается абстрактных типов данных (ADT). В этом назначении мы должны реализовать ADT, известный как Stack, через класс LinkedStack. У LinkedStack есть один конструктор, но в тестовых примерах, которые предоставил мне мой профессор, новый объект LinkedStack может создать либо новый объект LinkedList, либо новый объект ArrayList. Моя проблема в том, что независимо от того, как я определяю свой аргумент, я все равно получаю сообщение о том, что аргумент несовместим с классами.

Я пробовал логический тест, чтобы увидеть, был ли аргумент вызван какLinkedList или ArrayList, что, на мой взгляд, является хорошей вещью, но я не могу понять, как правильно назначить аргумент.

Я попытался установить аргумент в стек, а затем привести его к LinkedStack. с закрытой конечной переменной типа «Stack» я также пытался вызвать аргумент в виде списка, но не могу избавиться от ошибок, мешающих запуску процесса компиляции.

Это то, с чего мы начинаем:

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
}

1 Ответ

0 голосов
/ 10 октября 2019

Если вы ищете тип, который вы можете использовать для /*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>. Но, возможно, вы узнаете это на следующем уроке.

...