Java: returns接口的接口和函数的实现

Java: Implementation of interfaces and functions that returns interfaces

我在实现接口时遇到问题,该接口具有一个函数,该函数 returns 一个 class 的值,它本身实现了一个接口。 我有一个任务说我需要以这种方式实现那些特定的接口。 这些是我的接口:

public interface Something {
    int getValue();  // unique
}

public interface SomethingCollection {
    void add(Something something);
    Something removeMaxValue();
}

这是实现 Something 接口的class:

public class Node implements Something {
    private int value;
    private Node next;

    public Node(int value) { 
        this.value = value;
        this.next = null;
    }

    public Node(int value, Node next) { 
        this.value = value;
        this.next = next;
    }

    public int getValue() {
        return this.value;
    }

    public Node getNext() {
        return this.next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}

这是实现 SomethingCollection 的 class:

public class List implements SomethingCollection {
    private Node head;
    private int maxValue;

    public List() {
        this.head = null;
    }

    public List(Node p) {
        Node n = new Node(p.getValue(), p.getNext());
        this.head = n;
        this.maxValue = this.head.getValue();
    }

    public void add(Node node) {
        if (node.getValue() > this.maxValue) {
            this.maxValue = node.getValue();
        }

        node.setNext(this.head);
        this.head = node;
    }

    public Node removeMaxValue() {
        Node current = this.head;
        Node prev = this.head;

        if (this.head == null) {
            return this.head; 
        }

        while (current != null) {
            if (current.getValue() == this.maxValue) {
                prev.getNext() = current.getNext();
                return current;
            }

            prev = current;
            current = current.getNext();
        }
    }
}

我在列表 class 中遇到此错误:"List is not abstract and does not override abstract method add(Something) in SomethingCollection"。 我不知道如何解决这个问题以及我做错了什么。我该如何解决这个问题?

您的列表未实现 void add(Something something)

当然,它确实实现了 public void add(Node node),并且节点是 Something。但是你的 class 实现了一个接口。它必须满足该接口。该接口包括一个接受任何类型的 Something 的方法,而不仅仅是节点。

还有一些事情需要考虑:你想让一个节点成为某物,还是包含某物?

您可以在您的集合中使用泛型,像这样应该可以工作:

interface SomethingCollection <T>
{
   public void add(T something);
   public T removeMaxValue();
}

class List implements SomethingCollection<Node> {
    ...
}