4

我项目的第一部分是构建一个超图

这是一个快速绘制的 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;
}}

我认为 Type 会被自动推断,因为我为 imageVertex Map 定义它,然后为 tagVertex as String

我是否错误地使用了泛型?

4

5 回答 5

2

您已经重新定义了类型 T on setVertexValue。用这个。

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;
    }

}
于 2013-04-12T09:18:26.387 回答
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();

是一个完全独立的通用参数,它会影响Tin Vertex<T>

于 2013-04-12T09:17:43.410 回答
2

删除<T>for Vertex.setVertexValue

public abstract T setVertexValue();
于 2013-04-12T09:17:57.180 回答
1

你自己setVertexValue()有一个类型参数<T>;这意味着它重新定义了类的类型参数<T>。您的方法声明应如下所示

public  abstract T setVertexValue();

(注意没有<T>

于 2013-04-12T09:19:16.767 回答
1

像这样的东西必须为你工作。

public abstract T setVertexValue();

消除<T>

于 2013-04-12T09:34:52.783 回答