Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于指定泛型的子类显示绑定不匹配_Java_Generics - Fatal编程技术网

Java 用于指定泛型的子类显示绑定不匹配

Java 用于指定泛型的子类显示绑定不匹配,java,generics,Java,Generics,我正在用java编写一个prim算法。为了实现良好的可扩展性,我使用了一些泛型。但是有一个泛型不匹配的问题让我很困扰。我在这里对其进行总结,并在下面显示我的代码 LazyPrimMST的类是计算一个图的mst。所以我定义了一个泛型来表示所有类型的WeightedGraph。在我的实现中,LazyPrimMST泛型的部分是>,有两个子类WeightedGraph,它们是DensewEarthDgraph和SparsewEarthDgraph。在我的test main函数中,我想计算一个densew

我正在用java编写一个prim算法。为了实现良好的可扩展性,我使用了一些泛型。但是有一个泛型不匹配的问题让我很困扰。我在这里对其进行总结,并在下面显示我的代码

LazyPrimMST的类是计算一个图的mst。所以我定义了一个泛型来表示所有类型的WeightedGraph。在我的实现中,LazyPrimMST泛型的部分是>,有两个子类WeightedGraph,它们是DensewEarthDgraph和SparsewEarthDgraph。在我的test main函数中,我想计算一个densewarthdGraph实例的mst,所以我实例化了LazyPrimMST部分的泛型,比如densewarthdGraph,但是我得到了一个奇怪的错误,它是
绑定不匹配:densewarthdGraph类型不是LazyPrimMST类型的绑定参数的有效替代品

错误信息

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Bound mismatch: The type DenseWeightedGraph<Double> is not a valid substitute for the bounded parameter <Graph extends WeightedGraph<Weight>> of the type LazyPrimMST<Weight,Graph>
线程“main”java.lang中出现异常。错误:未解决的编译问题: 绑定不匹配:dendGraph类型不是LazyPrimMST类型的绑定参数的有效替代品
相关代码,LazyPrimMST类的一部分

公共类懒虫{
私有图G;
私有MinHeap pq;
私有布尔[]标记;
私人列表mst;
私人体重指数;
公共懒散(图){
这个.G=图;
pq=新的MinHeap(G.E());
标记=新布尔值[G.V()];
mst=newarraylist();
我的测试主数据的一部分,其中包含错误行

densewarthdGraph g2=新的densewarthdGraph(8,false);
ReadWeightedGraph readGraph2=新的ReadWeightedGraph(g2,文件名);
System.out.println(“密集图中的测试g1:”);
g2.show();
System.out.println();
LazyPrimMST mst=newlazyprimmst(g2);//错误行
对于(边缘:mst.mstEdges()){
System.out.println(“(“+edge+”);
}
密度图的一部分

公共类dendGraph实现了WeightedGraph{
私人int n;
私有INTM;
私有布尔定向;
私有边缘[][]g;
公共密度图(整数n,布尔定向){
这个,n=n;
这是m=0;
this.directed=directed;
g=新边[n][n];
对于(int i=0;i
DensewedGraph
声明它实现了
WeightedGraph
,而不是
WeightedGraph
。这应该是导致错误的原因


正如@Tom在对您的问题的评论中提到的,您也没有指定
权重
扩展了
可比性
,而不仅仅是
可比性
。虽然这样编译(向后兼容功能),在中使用原始类型。

好吧,一个问题是您在
densewdgraph
中对
Comparable
的原始使用。这可能无法解决您的问题,但您应该避免使用原始类型。答对了!您的第一个建议是正确的,直到您说了,我才注意到这一点。因为我以前很少在java中使用泛型,所以我总是忘了避免使用原始类型e原始类型的使用。我已经设置了我的IDE,所以它会发出关于原始类型的警告。我发现它非常有用,所以如果你还没有这样做,我建议你也这样做。好的,事实上我的IDE提醒它。但是我像往常一样忽略警告。花时间和精力解决所有警告确实是值得的。毕竟,它们的存在是有原因的。如果你同意,say、 不写入
@Override
s(),请重新配置IDE以忽略这些警告。