关于java:通用方法类型安全

关于java:通用方法类型安全

Generic Method Type Safety

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

我有各种各样的NodeType实现和各种节点实现。

在AbstractNodeType(NodeType的顶级)中,我有ab abstract createInstance()方法,一旦由子类实现,将创建正确的节点实例:

1
2
3
4
5
public abstract class AbstractNodeType {
  // ..

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

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

1
2
3
4
5
6
7
8
9
10
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替换为AbstractNodeJava 5增加了支持,但没有得到它应得的酒吧。


两种方式:

(a)不要使用仿制药。在这种情况下可能没有必要。(尽管这取决于您没有显示的代码。)

(b)generify abstractnodetype如下:

1
2
3
4
5
6
7
8
public abstract class AbstractNodeType<T extends AbstractNode> {
  public abstract T createInstance();
}
public class ThingType<Thing> {
  public Thing createInstance() {
    return new Thing(...);
  }
}


类似的事情应该会奏效:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
interface Node{
}
interface NodeType<T extends Node>{
    T createInstance();
}
class Thing implements Node{}
class ThingType implements NodeType<Thing>{
    public Thing createInstance() {
        return new Thing();
    }
}
class UberThing extends Thing{}
class UberThingType extends ThingType{
    @Override
    public UberThing createInstance() {
        return new UberThing();
    }
}


推荐阅读

    cad怎么设置节点|CAD怎么加节点

    cad怎么设置节点|CAD怎么加节点,,1. CAD怎么加节点天正CAD软件画节点的方法:1、在打开的软件中点击左侧工具栏中的图块图案-通用图库。2、

    Python之可迭代对象、迭代器、生成器

    Python之可迭代对象、迭代器、生成器,迭代,生成器,一、概念描述可迭代对象就是可以迭代的对象,我们可以通过内置的iter函数获取其迭代器,可

    应用程序对象

    应用程序对象,,应用程序对象是一个应用程序级对象,用于在所有用户之间共享信息,并且在Web应用程序运行期间可以保存数据。 应用的性质: 方法

    海龙节点快捷键|海龙工具快捷键

    海龙节点快捷键|海龙工具快捷键,,1. 海龙工具快捷键惠普笔记本电脑的优点:1、 品牌:这年头买任何东西都要涉及这样一个问题,很多人购买东西都

    Java创建对象的几种方式

    Java创建对象的几种方式,对象,方法,本文目录Java创建对象的几种方式java中几种创建对象的方式1Java中创建对象的集中方式有那些JAVA创建对

    wps快速的编辑图层|WPS巧用对象图层

    wps快速的编辑图层|WPS巧用对象图层,图层,编辑,快速,wps,1.WPS 如何巧用对象图层一、认识对象图层工具及按纽1、您可以在插件工具栏中可以