与多种通用类型的接口?
问题描述:
这是我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
型的重心顶点(例如标签顶点) -
M
类型的Vertx名单!=T
(例如Image Vertex)
and ret瓮型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
不是推断?
答
您在方法定义中将T从接口定义映射到T中。 千万不要这样做。他们是不同的,不相关的类型参数,没有办法从另一个推断。你的方法签名基本上是说的一个非常混乱的方式:
public List<Vertex> search(Object centroid, List<M> allElementsVertex);
拇指的Java规则:它永远有道理使用方法级类型参数,如果它在方法签名中只使用一次。方法级别类型参数对于在参数类型或返回类型之间表示约束很有用。
你是什么意思*为什么没有推断T型?*? – 2013-04-21 16:05:23
类别TagImagesHyperEdge 类型T必须替换为TagVertex – nawara 2013-04-21 16:06:27
是的,它会被推断出来,但在'search'方法中有不同的''。 –
2013-04-21 16:08:14