java - 通用方法类型安全

标签 java generics

我有 NodeTypeNode 的概念。 NodeType 是一堆元数据,您可以从中创建 Node 实例(很像整个类/对象关系)。

我有各种 NodeType 实现和各种 Node 实现。

在我的 AbstractNodeType(NodeTypes 的顶层)中,我有一个抽象的 createInstance() 方法,一旦由子类实现,它将创建正确的 Node 实例:

public abstract class AbstractNodeType {
  // ..

  public abstract <T extends AbstractNode> T createInstance();
}

在我的 NodeType 实现中,我实现了如下方法:

public class ThingType {
  // ..

  public Thing createInstance() {
    return new Thing(/* .. */);
  }
}

// FYI
public class Thing extends AbstractNode { /* .. */ }

这一切都很好,但是 public Thing createInstance() 会创建一个有关类型安全的警告。具体来说:

Type safety: The return type Thing for createInstance() from the type ThingType needs unchecked conversion to conform to T from the type AbstractNodeType

我做错了什么会导致这样的警告?

如何重构代码来解决此问题?

@SuppressWarnings("unchecked") 不好,我希望通过正确编码来解决此问题,而不是忽略问题!

最佳答案

您只需替换<T extends AbstractNode> T即可与 AbstractNode感谢 covariant returns 的魔力。 Java 5添加了支持,但它没有得到应有的 pub。

关于java - 通用方法类型安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/81723/

相关文章:

java - 如何使用 java.util.Date 解析夏令时切换期间发生的其他时区的日期

java - 如何创建一个将文本输入传递给 servlet 并重定向到同一个 servlet 的 Flex 程序

java - 我们如何处理 LDAP 过滤器中的换行?

c# - 具有逆变类型参数和 Unity 容器的泛型

Java 定义从父类(super class)返回的协变

java - 以错误的方式将原始 TwoTuple 转换为 TwoTuple<A,B> 但没有收到任何警告(Java 泛型)

java - Linux 上的 JDK 1.8 缺少 JNI 包含文件

java - objectaid 类图保存为 jpeg

java - 为什么内部类提示泛型?

c - 在 C 中打印通用变量的名称和值