java - 如何避免java中自引用类型安全接口(interface)的参数类型警告?

标签 java generics tree

我正在java中使用树,并且我有一个带有自引用的简单无序树的以下接口(interface):

public interface Node<N extends Node> {

  public N getParent();
  public void setParent(N parent);

  public Collection<N> getChildren();

  public void addChild(N node);
  public void removeChild(N node);

  public N getRootNode();

  ... more ...
}

当然的想法是创建一个类型安全的节点

  public abstract class ParentChildNode<E extends Node> implements Node<E> {

真正让我烦恼的问题是我收到的警告:

ParentChild is a raw type. References to generic type Node<N> should be parameterized

warning on this line:

public interface Node<N extends Node> {

warning on this line:

    public abstract class ParentChildNode<E extends ParentChild> implements ParentChild<E>  

我能做到:

public interface Node<N extends Node<?>> {

但我担心我会陷入恶心领域。我可以抑制警告,但我工作的地方不允许这样做。

有什么建议吗?我注意到 java.util collections API 在任何地方都没有任何警告。

提前致谢

最佳答案

像这样的东西怎么样(与Enum类的声明并行):

public interface Node<N extends Node<N>> {

  public N getParent();
  public void setParent(N parent);

  public Collection<N> getChildren();

  public void addChild(N node);
  public void removeChild(N node);

  public N getRootNode();

  ... more ...
}

public abstract class ParentChildNode implements Node<ParentChildNode> {

关于java - 如何避免java中自引用类型安全接口(interface)的参数类型警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393708/

相关文章:

java - '...jdoDetachedState' gwt 项目中的未知列 'field list'

c# - 如何使泛型类的类型可转换?

java - 从树数据结构打印纯文本树(java)

angularjs - 递归 AngularJS 过滤器

java - 设置长度时如何在 StringBuilder 中添加空格而不是 null?

java - 是否有可能声明 4 个选项而 Java 必须随机选择 1 个?

swift - 符合具有通用功能的协议(protocol)的变量

typescript - TypeScript 中带有泛型的条件类型

pointers - 可以将结构指针方法中的指针重新分配给另一个实例吗?

java - 在 Android 上更新弹出窗口上的 textview 时出错