Как получить возвращаемый тип интерфейса <T>? - PullRequest
0 голосов
/ 21 февраля 2019

я застрял в этой проблеме, я попытался исправить ее, но ничего не изменилось ..

, поэтому прежде всего "Стек" - это интерфейс , и это обязательный метод

, которые копируют стек массива и возвращают его как новый стек, это мой код:

public class ArrayStack<Type> implements Stack<Type> {

private int maxSize;
private int top;
private Type [] nodes;

@SuppressWarnings("unchecked")

public ArrayStack(int n){
    maxSize = n ;
    top = -1 ;
    nodes = (Type[]) new Object[n];
}



@SuppressWarnings("unchecked")

public Stack<Type> copy() {

    int n = nodes.length;
    Type[] ns = (Type[]) new Object[n];

    for(int i = 0 ; i < n ; i++){

        ns[i]= nodes[i];
    }



    return ns;
}

, поэтому я получаю ошибку компиляции в операторе " return ns; ", который говорит:

Несоответствие типов: невозможно преобразовать из Type [] в стек

Я не знаю, неправильно ли я написал сигнатуру метода или новый массив ..

Буду признателен за вашу помощь:)

1 Ответ

0 голосов
/ 21 февраля 2019

Здесь:

Type[] ns

возвращается, и поэтому должно быть:

Stack<Type>

Но массив T ... не является стеком T. Вы должны составитьна ваш взгляд, должен ли метод вернуть массив (затем изменить сигнатуру) или он должен вернуть новый экземпляр стека (в этом случае вы не можете вернуть этот ns массив!)

в качестве имениcopy() подразумевает позднее, вам, вероятно, следует:

  • создать новый экземпляр ArrayStack
  • настроить стек этого нового стека с тем же содержимым, что и оригинальный стек ...и затем
  • возвращает этот новый экземпляр ArrayStack.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...