我是仿制药的新手,我无法找到实现此目标的最佳方法。请随意指出我是否做错了明显的事情。

interface Node<T> {

    void addOne(Node<T> node);
}

class StringNode implements Node<String> {

    List<StringNode> data = new ArrayList<>();

    /**
     * {@inheritDoc}
     */
    @Override
    public void addOne(Node<String> node) {
        StringNode stringNode = (StringNode) node;
        data.add(stringNode);
    }

}

我希望通过使函数本身具有签名公共void addOne(StringNode node)的特征,来在addOne的实现中找到避免从Node降到StringNode的方法。关于接口的任何实现如何更改Node的定义以实现这一点的任何想法?

我尝试搜索已经提出的问题,但找不到匹配的对象。任何已经讨论过的问题的指针也将不胜感激。

提前致谢!

最佳答案

这就是我要做的:

interface Node<T extends Node<T>> {

    void addOne(T node);
}

class StringNode implements Node<StringNode> {

    List<StringNode> data = new ArrayList<StringNode>();

    /**
     * {@inheritDoc}
     */
    @Override
    public void addOne(StringNode node) {
        data.add(node);
    }

}

与U-No-Poo的建议类似,但更加严格(强制T实际上是节点)

07-28 00:20