Предоставление доступа к классу node и сохранение ссылки на него в другом классе

#java #nodes #doubly-linked-list

#java #узлы #дважды связанный список

Вопрос:

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

Я думаю, это из-за разных типов: <T extends MineCart> vs <MineCart> .

Я не ищу ответа о том, как написать метод remove, а скорее ищу решение, чтобы объект MineCart мог действовать как узел. Я был бы признателен за несколько советов о том, как решить эту проблему.

Linkedlist (отображается только соответствующая часть)

 public class MyCustomLinkedList<T extends MineCart> implements Iterable<T> {

    //... your typical list methods (e.g. add/remove etc)

    public static class Node<T> {
        private T item;
        private Node<T> prev, next;

        public Node(T item, Node<T> prev, Node<T> next) {
            this.item = item;
            this.prev = prev;
            this.next = next;
        }
    }
}
  

Класс MineCart (отображается только соответствующая часть)

 public abstract class MineCart implements Comparable<MineCart> {
    public MineCart nextCart; 
    public MineCart prevCart;

    public MineCart getNextMineCart() {
       // and then do something like this:
       // return this.next;
       // or return nextCart;
    }
}
  

Комментарии:

1. В чем на самом деле ваш вопрос? Какова связь между Wagon и MineCart?

2. @Confusion srry это была опечатка, я ее исправил. В чем заключается мой актуальный вопрос (простая версия) У меня есть объект MineCart -> теперь заставьте его работать как узел

3. Зачем вам нужен класс Node, поскольку в MineCart есть вся информация (предыдущая, следующая)?

4. вызов this.next в классе MineCart не работает, также nextCart имеет значение null;

Ответ №1:

Чтобы позволить мини-тележке удалить себя из списка:

 public abstract class MineCart implements Comparable<MineCart> {
    public void remove() {
       prevCart.nextCart=nextCart;
    }
}
  

перед:

 [cart1] - [cart2] - [cart3]
  

cart2.remove()

после:

 [cart1] - [cart3]  
[cart2] 
  

Поскольку MineCart знает о своих соседях, вам не нужен класс Node.

Комментарии:

1. Мой плохой, я не искал решения о том, как написать метод remove. Я обновил вопрос, чтобы сделать его немного более понятным.