naw*_*ara 1 java generics interface
这是我的干预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);
}
Run Code Online (Sandbox Code Playgroud)
方法搜索有两个参数:
T(例如Tag Vertex)M!= T(例如Image Vertex)并返回两个类型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;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么T不推断类型?
您正在使用方法定义中的T从接口定义中隐藏T. 永远不要这样做.它们是不同的,不相关的类型参数,没有办法从另一个推断出来.您的方法签名基本上是一种非常令人困惑的说法:
public List<Vertex> search(Object centroid, List<M> allElementsVertex);
Run Code Online (Sandbox Code Playgroud)
Java的经验法则:如果方法级别的类型参数仅在方法签名中使用一次,那么它就没有意义.方法级类型参数可用于表示参数类型或返回类型之间的约束.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |