【问题标题】:Generic Implementation of Directed Graph有向图的通用实现
【发布时间】:2014-08-10 22:40:46
【问题描述】:

我在实施通用 DirectGraph 实施时遇到问题。请帮我!

public interface DirectedGraph<Vertex<T extends Comparable<T>>> {
   <T extends Comparable<T>> boolean  addVertex(Vertex<T> v);
   <T extends Comparable<T>> boolean addEdge(Vertex<T> v1, Vertex<T> v2);
   int size();
   <T extends Comparable<T>>boolean removeEdge(Vertex<T> v1, Vertex<T> v2);
   <T extends Comparable<T>>boolean hasEdge(Vertex<T> v1, Vertex<T> v2);

}

public class Vertex<E extends Comparable<E>> {
  E vertex;
}

上面的代码有什么问题? Eclipse 显示错误

Multiple markers at this line
- Syntax error on token "<", , expected
- The type parameter Vertex is hiding the type 
 Vertex<E>
- Syntax error on token ">>>", >> expected

【问题讨论】:

  • 您到底有哪些问题?这段代码能编译吗?
  • 您是如何得出上述代码有问题的结论的?
  • 不! .. 代码未编译。 Eclipse 在此行显示错误多个标记 - 标记 " - 标记上的语法错误 >>>",>> 预期跨度>
  • @PraveenReddyKatta 这是朝着正确方向迈出的一步,因为我们看不到您的显示器。现在编辑您的帖子以包含它,格式正确,而不是将其粘贴到评论中。也请看stackoverflow.com/help/how-to-ask
  • 好;你通过编辑你的问题来添加信息做了正确的事情。现在,我们不知道“这条线”是什么。请清楚地识别 Eclipse 所指的行。请记住,我们看不到您的屏幕。

标签: java generics


【解决方案1】:

要么创建一个泛型类,要么创建一个泛型方法。在你的情况下,你都在做。另外,既然你已经决定DirectedGraph 将使用Vertex 类型,它不是类 Vertex 而是 type “顶点”。当您使用类或泛型方法时,您使用的是具体类或接口类型而不是在定义本身中

public interface DirectedGraph<T extends Comparable<T>> {
        boolean  addVertex(Vertex<T> v);
        boolean addEdge(Vertex<T> v1, Vertex<T> v2);
        int size();
        boolean removeEdge(Vertex<T> v1, Vertex<T> v2);
        boolean hasEdge(Vertex<T> v1, Vertex<T> v2);

    }

    class Vertex<E extends Comparable<E>> {
      E vertex;
    }

【讨论】:

  • 如何将 DirectedGraph 限制为仅接受 Type Vertex??.. 因为您所做的更改将接受任何实现 Comparable ...正确的类型?请解释!
  • @PraveenReddyKatta 你已经被限制了。类型 T 将被替换为顶点类型“E”的类型
  • @PraveenReddyKatta 您所有的方法参数都采用 Vertex 类型
  • 非常感谢! ... 现在我知道了。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多