Я безумно рад сказать, что я только что реализовал общий список ссылок из нескольких недель назад в проекте и IT WORKS! Одна проблема. Я вынужден сделать бросок (и не ожидал).Использование обобщенного связанного списка, но принудительного использования (приведение) при появлении
Вот некоторые фрагменты, я надеюсь, достаточно, чтобы определить проблемы, начиная с общим стеком:
public class GenericStack<E> {
public LinkedList <E> stack = new LinkedList<>();
public void push (E obj){
stack.add(obj);
}
public E pop() {
if (stack.isEmpty()) return null;
return stack.removeLast();
}
...
}
Вот класс Defintion, в котором я использую общий стек:
public class Grid extends GenericStack<JTextField> implements ActionListener, KeyListener, KeyCodes
Вот мне определяя stack
и то, что я нажимаю и выскакиваю:
GenericStack stack = new GenericStack();
public static JTextField[][] cells = new JTextField[11][11];
Вот я толкая на stack
:
stack.push(Grid.cells[currentCell.row][currentCell.col]);
Вот где я выскочить из stack,
который работает ТОЛЬКО ЕСЛИ ДЕЛАТЬ CAST показано ниже:
private void calculate(){
JTextField w = new JTextField();
while(stack.size()>0){
w = (JTextField) stack.pop();
System.out.println("stack element " + w.getText());
}
}
Теперь я не жалуюсь; Я даже не уверен, что есть проблема с этим, но без броска (JTextField)
я получаю «НЕОБХОДИМЫЕ ТИПЫ - ТРЕБУЕТСЯ: JTextField; НАЙДЕН: Объект», но stack.pop()
четко определен, чтобы вернуть общий тип, который является JTextField
, так зачем мне бросать?
Вы можете отметить один из ответов, как принято. Что касается путаницы композиции и наследования, мы думали, что ваша декларация «GenericStack» находится внутри класса «Grid». Если это не так, тогда все в порядке. –
Я печатал, когда Rojit отправил второй раз. Это отличное объяснение, так как стирание подняло голову днем или два назад, и я решил подождать до поры до времени. Ну, это позже, и я думаю, что понял. БЛАГОДАРЮ. Но теперь я должен снова попытаться справиться с «дублированием», так как теперь вы оба говорили об этом. Я получу его, может быть, даже сегодня. И я просто перечитываю обе записи. Я могу иметь его, даже когда я печатаю. Еще раз спасибо. – DSlomer64
Я ПОЛУЧИЛ ЭТО! Я удалил предложение extends и, конечно же, сработал. Я не понимал (не думал), что, когда GenericStack является частью одного и того же пакета, расширения являются излишними. Но обратите внимание: одна причина расширилась, в первую очередь, было то, что я был HOPING для импорта genericstack, но я не мог заставить его работать, поэтому я сдался и просто скопировал пакет genericstack в текущий. (Думаю, я вернусь к попытке импортировать, так как это очень важно, чтобы иметь возможность делать, особенно с собственным классом!) – DSlomer64