实现通用接口时如何避免强制转换

how to avoid casting when implementing generic interface

我正在做一些图形实现,我认为代码闻起来很糟糕。

所以我做了一个界面图:

interface Graph <K extends  Comparable <K>  , V>

例如有这样的方法:

public void addVertex(K key, V value);

public boolean remove (K key);

这些实现将保存基于键值对的顶点。

然后我做了一个实际的class:

public class AdjacencyList <K extends  Comparable <K>  , V>  implements Graph

是什么导致我上面提到的方法变成这样:

public void addVertex(Comparable key, Object value){/*rest of the code*/}
public boolean remove(Comparable K){/*rest of the code*/}

这些当然让我做了很多选角。

我只是在学习通配符,触及表面,在这里阅读了一些问题,但是我仍然很困惑为什么我的代码会这样,更重要的是为什么,这样的事情的正确方法是什么make this clean, 并使方法参数变回 K 和 V.

您必须更改 class 以实施 Graph<K, V> 而不仅仅是 Graph

public class AdjacencyList <K extends Comparable<K>, V>  implements Graph<K, V>

然后您可以使用 KV 作为您实现的方法的参数。

@Override
public void addVertex(K key, V value) {
    // TODO Auto-generated method stub
}