Java 抽象方法的返回值是否可以是泛型类型
我的项目的第一部分是构造一个超图 这是一个快速绘制的UML图 顶点类Java 抽象方法的返回值是否可以是泛型类型,java,generics,graph,abstract-class,factory-pattern,Java,Generics,Graph,Abstract Class,Factory Pattern,我的项目的第一部分是构造一个超图 这是一个快速绘制的UML图 顶点类 public abstract class Vertex <T>{ int vertexId ; T vertexValue ; public abstract <T> T setVertexValue(); } 公共抽象类顶点{ 内顶点; T顶点值; 公共摘要T setVertexValue(); } imageVertex类 public class ImageVe
public abstract class Vertex <T>{
int vertexId ;
T vertexValue ;
public abstract <T> T setVertexValue();
}
公共抽象类顶点{
内顶点;
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扩展了Vertex{
@凌驾
公共T setVertexValue(){
//TODO自动生成的方法存根
返回null;
}}
我以为在为imageVertex贴图定义该类型时,会自动推断该类型
稍后将tagVertex用作字符串
我是否错误地使用了泛型?你似乎在试图写:
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顶点值;
公共摘要T setVertexValue();//注意:否
}
公共类ImageVertex扩展了Vertex{
@凌驾
公共映射setVertexValue(){
返回null;
}
}
在您的代码中,中的
public abstract <T> T setVertexValue();
public abstract T setVertexValue();
是一个完全独立的通用参数,在顶点中阴影T
删除顶点的
。setVertexValue
:
public abstract T setVertexValue();
您已经在setVertexValue
上重新定义了类型T。用这个
public abstract class Vertex <T>{
int vertexId ;
T vertexValue ;
public abstract T setVertexValue();
}
公共抽象类顶点{
内顶点;
T顶点值;
公共摘要T setVertexValue();
}
它正确地使用了泛型
public class ImageVertex extends Vertex<Map<String, String>>
{
@Override
public Map<String, String> setVertexValue()
{
// TODO Auto-generated method stub
return null;
}
}
公共类ImageVertex扩展了Vertex
{
@凌驾
公共映射setVertexValue()
{
//TODO自动生成的方法存根
返回null;
}
}
您的setVertexValue()
本身有一个类型参数
;这意味着它将重新定义类的类型参数
。您的方法声明应该如下所示
public abstract T setVertexValue();
(注意没有
)这样的东西一定适合你
public abstract T setVertexValue();
删除