实现通用接口时如何避免强制转换
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>
然后您可以使用 K
和 V
作为您实现的方法的参数。
@Override
public void addVertex(K key, V value) {
// TODO Auto-generated method stub
}
我正在做一些图形实现,我认为代码闻起来很糟糕。
所以我做了一个界面图:
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>
然后您可以使用 K
和 V
作为您实现的方法的参数。
@Override
public void addVertex(K key, V value) {
// TODO Auto-generated method stub
}