我的项目的第一部分是构建一个超图
这是一个快速绘制的UML图
顶点类
public abstract class Vertex <T>{
int vertexId ;
T vertexValue ;
public abstract <T> T setVertexValue();
}
imageVertex类
public class ImageVertex extends Vertex<Map<String, Instance>>{
@Override
public <T> T setVertexValue() {
// TODO Auto-generated method stub
return null;
}}
我认为当我为imageVertex Map定义Type时会自动推断Type 然后将tagVertex作为String
我错误地使用了泛型吗?
答案 0 :(得分:2)
您似乎在尝试写:
public abstract class Vertex<T> {
int vertexId;
T vertexValue;
public abstract T setVertexValue(); // NOTE: no <T>
}
public class ImageVertex extends Vertex<Map<String, Instance>> {
@Override
public Map<String, Instance> setVertexValue() {
return null;
}
}
在您的代码中,
中的<T>
public abstract <T> T setVertexValue();
是一个完全独立的通用参数,可以隐藏T
中的Vertex<T>
。
答案 1 :(得分:2)
删除<T>
的{{1}}:
Vertex.setVertexValue
答案 2 :(得分:2)
您已在setVertexValue
上重新定义了类型T.使用它。
public abstract class Vertex <T>{
int vertexId ;
T vertexValue ;
public abstract T setVertexValue();
}
它正确使用通用
public class ImageVertex extends Vertex<Map<String, String>>
{
@Override
public Map<String, String> setVertexValue()
{
// TODO Auto-generated method stub
return null;
}
}
答案 3 :(得分:1)
您的setVertexValue()
本身有一个类型参数<T>
;这意味着它重新定义了类的类型参数<T>
。您的方法声明应该类似于
public abstract T setVertexValue();
(注意缺少<T>
)
答案 4 :(得分:1)
这样的事情必须适合你。
public abstract T setVertexValue();
删除<T>