java - 当抽象产品是泛型类时工厂模式

标签 java generics graph factory-pattern

我的项目的第一部分是构建一个超图

这是一个快速绘制的UML图enter image description here

顶点类

public abstract class Vertex <T>{

    int vertexId ;
    T vertexValue ;
    public  abstract  T computeVertexValue();
}

图像顶点类

public class ImageVertex extends Vertex<Map<String, Instance>>{


    public ImageVertex(int id ) {
        this.vertexId=id;
    }

    @Override
    public Map<String, Instance> computeVertexValue(){
        return null;
    }
}

抽象顶点工厂

public abstract class AbstractVertexFactory {

    public abstract  Vertex createVertex(int id);

    public  Vertex produceVertex(int id) {

        Vertex vertex = createVertex(id);
        vertex.computeVertexValue();
        return vertex;
    }
}

ImageFactory类

public class ImageFactory extends AbstractVertexFactory {

    @Override
    public Vertex createVertex(int id) {
        // TODO Auto-generated method stub
        return new ImageVertex(id);
    }
}

模拟器

public class ImageFactorySimulator {

    /**
     * @param args
     */
    public static void main(String[] args) {


        AbstractVertexFactory imFactory= new ImageFactory();

        ImageVertex im = (ImageVertex) imFactory.createVertex(0);

    }

}

模拟器中cast的使用已被屏蔽 我怎样才能避免它?

最佳答案

你可以使用

public abstract class AbstractVertexFactory <T extends Vertex> {
    public abstract  T createVertex(int id);
}

public class ImageFactory extends AbstractVertexFactory<ImageVertex> {

    @Override
    public ImageVertex createVertex(int id) {
        // TODO Auto-generated method stub
        return new ImageVertex(id);
    }
}

关于java - 当抽象产品是泛型类时工厂模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968989/

相关文章:

c# - 切换“首选 32 位”时 64 位操作系统上接口(interface)和泛型的奇怪调试器行为

mongodb - 用于高效大规模图遍历的数据库

java - 寻找最大面积的算法

generics - 在结构定义中使用静态整数

java - java中的流关闭异常

java - db.collection.find() 在 EclipseLink 的 native 查询中不起作用

java - 如何更改 GRAL 中的插图颜色?

swift - Swift 编程语言 - 泛型 - Where 子句的问题

c++ - 完成图形检查

java - 为什么我的spring boot应用会自动关闭?