这是我的Interfce BinaryHeterogenousHyperedge
:
public interface BinaryHeterogenousHyperedge
<M extends Vertex<L>, L,T extends Vertex<E>, E>
extends Hyperedge
{
public <T> List<Vertex> search(T centroid ,List<M> allElemntsVertex);
}
方法搜索有两个参数:
T
的质心顶点(例如Tag Vertex)M
的Vertx列表!= T
(例如图像顶点)并返回类型T
和M
TagsImagesHyperEdges
实现了这个界面:
public class TagImagesHyperedge
implements BinaryHeterogenousHyperedge
<ImageVertex,Map<String, Instance> ,TagVertex,String>
{
@Override
public <T> List<Vertex> search(T centroid, List<ImageVertex> allElemntsVertex)
{
// TODO Auto-generated method stub
return null;
}
}
为什么不推断类型T
?
答案 0 :(得分:5)
您正在使用方法定义中的T从接口定义中隐藏T. 永远不要这样做。他们是不同的,无关的类型参数,没有办法从另一个推断出来。您的方法签名基本上是一种非常令人困惑的说法:
public List<Vertex> search(Object centroid, List<M> allElementsVertex);
Java的经验法则:如果在方法签名中仅使用一次方法级别类型参数,那么永远没有意义。方法级类型参数对于在参数类型或返回类型之间表达约束非常有用。