实例化泛型类型以支持自定义对象

卡洛斯

在构造随机图时,我尝试支持2种不同的边线类型

  • TimestampEdge
  • DiffusionEdge

每个都扩展了通用Edge类

public class TimeStampEdge extends Edge<DiffusionVertex,Integer> {

//timestamp edge specific methods

}

public class DiffusionEdge extends Edge<DiffusionVertex,Integer> {

    public DiffusionEdge(String name, DiffusionVertex v, DiffusionVertex v1) {
        super(name, v, v1);
    }
}

V是一个自引用变量,因此顶点可以维护其邻居列表,而K只是边具有的某些值

public class Edge<V extends Vertex<?,V>,K> implements Edges<V,K> {
    //Generic edge methods and values
}

我想要做的是能够从同一图形模型创建两个边缘类型的图形,这是随机K树的示例。其中E应该是TimeStampEdgeDiffusionEdge,扩散顶点是所有图模型使用的顶点,并且GraphClass是所有图模型继承的抽象类。

public class KTree<E extends Edge<DiffusionVertex, Integer>> extends GraphClass<DiffusionVertex,E> 
//ktree methods

   public boolean addEdge(DiffusionVertex v, DiffusionVertex v1){
        if(this.findEdgeSet(v,v1).isEmpty()){

            v.setDegree(v.getDegree()+1);
            v1.setDegree(v1.getDegree()+1);

            E edge = (E) new Edge(v.getLabel() +"-"+v1.getLabel() ,v,v1);


            this.Edges.put(edge.getHashCode(), edge);

            return true;

        }else{

            return false;

        }
    }

//more ktree methods
}

我一直遇到java.lang.ClassCastException无法将Edge强制转换为TimeStampEdgewhere类DiffusionEdge,我认为问题出在我所显示的addEdge方法中的edge实例化始终是Edge类的缘故。但是我不确定如何在创建E型边的地方制作它。任何有关如何执行此操作的帮助将不胜感激!

杰克·阿莫

调用new Edge(...)不会创建以E表示的Edge的任何子类,除非E确实表示Edge。将对象从一种类型转换为另一种类型时,Java不会更改其实际类型,更不用说将其转换为通用类型了。为了使类型转换为特定类型起作用,对象本身必须已经是该类型。

如果要创建一个新的E,则可以将其传递给ASupplier<E>或使用工厂模式正确地创建一个新的E。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实例化泛型类型以支持自定义对象

来自分类Dev

Swift语言中带有自定义对象的泛型类型

来自分类Dev

Swift语言中带有自定义对象的泛型类型

来自分类Dev

将自定义类对象传递给Java中的泛型类型

来自分类Dev

从对象而不是类型的F#泛型类型实例化

来自分类Dev

在C#中序列化实现IEnumerable的自定义泛型类型

来自分类Dev

实例化泛型类型

来自分类Dev

实例化泛型类型

来自分类Dev

使用泛型的Hibernate +自定义用户类型

来自分类Dev

使用泛型类型的自定义迭代器

来自分类Dev

TypeScript - 使用泛型创建自定义类型

来自分类Dev

使用字典实例化具有自定义类型属性的对象

来自分类Dev

从GameObject继承的“实例化”自定义类型

来自分类Dev

与实例化自定义对象数组的混淆

来自分类Dev

如何通过泛型类型实例化?

来自分类Dev

实例化泛型类型的EnumSet

来自分类Dev

Java实例化泛型类型

来自分类Dev

从变量实例化泛型类型

来自分类Dev

如何实例化泛型类型

来自分类Dev

在Swift中泛型类型的where子句中访问自定义协议的关联类型

来自分类Dev

如何从对象类型定义泛型?

来自分类Dev

将泛型类型参数限制为 int、double 或自定义类

来自分类Dev

Java泛型-Java是否需要支持本地定义的类型?

来自分类Dev

为什么在实例化具有具体类型的对象时不可能对变量使用泛型类型?

来自分类Dev

支持嵌套类型中自定义类的默认序列化

来自分类Dev

Scala从泛型类型实例化具体类

来自分类Dev

泛型类型实例化和Lambda表达式

来自分类Dev

获取未实例化泛型的键和值类型

来自分类Dev

Java-实例化泛型类型的类

Related 相关文章

热门标签

归档