我是仿制药的新手,我无法找到实现此目标的最佳方法。请随意指出我是否做错了明显的事情。
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实际上是节点)