Java如何在重写泛型类型的接口方法时获取具体的参数类型
我是一个泛型新手,我无法找到最好的方法来实现这一点。如果我做了一些明显错误的事情,请随时指出
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);
}
}
我希望找到一种方法,通过使函数本身具有签名public void addOne(StringNode Node),来避免在addOne的实现中从Node到StringNode的降级。对于如何更改节点的定义以实现接口的任何实现,有什么想法吗
我试着搜索已经问过的问题,但没有找到一个匹配的。对于已经讨论过的任何问题,我们也将不胜感激
提前谢谢
# 1 楼答案
您可以引入另一个通用参数:
每当需要实际值类型(在本例中为字符串)时使用
VALUE_TYPE
,每当要传递该类型的节点时使用SELF
# 2 楼答案
我会这样做:
与U-No-Poo的建议类似,但更严格一点(强制T实际上是一个节点)
# 3 楼答案
为什么要分别使用String和StringNode?你就不能说