【问题标题】:Java - Interface extending itselfJava - 扩展自身的接口
【发布时间】:2013-01-29 11:07:15
【问题描述】:

我已经使用这个网站大约 6 个月了,是时候问我的第一个问题了,因为我找不到这个问题的答案,至少没有我能理解的答案!

在这段代码中,为什么这个接口是自己扩展的?

public interface PositionedVertex<V extends PositionedVertex<V>> {

/**
 * @return Position for node data.
 */
public Point getPosition();
}

这段代码不会做同样的事情吗?:

public interface PositionedVertex<V> {

/**
 * @return Position for node data.
 */
public Point getPosition();
}

提前致谢!

【问题讨论】:

  • 你真的应该接受一个优秀的答案。

标签: java interface extends


【解决方案1】:

在第一种情况下,您将泛型类型参数限制为interface 本身的子类型,而在第二种情况下,您可以将任何类型作为泛型类型参数。因此,它们可能是不同的声明。

例如,您可以定义如下引用:

PositionedVertex<String>

适用于2nd interface type,但不适用于1st one

【讨论】:

  • 谢谢!超级快的答案!
【解决方案2】:

它不会自行扩展。它指定它的泛型参数 V 必须表示一个扩展或实现自身的类型。

【讨论】:

    【解决方案3】:

    接口没有自行扩展。 &lt;V extends PositionedVertex&lt;V&gt;&gt; 是与您的接口关联的泛型类型的绑定。它只是意味着任何实现此接口的类的泛型类型参数本身必须是PositionedVertex

    【讨论】:

      【解决方案4】:

      如果不显示更多代码,就无法说明原因。或者这就是全部?它实际上告诉你的是,在这个接口的某处使用了某种类型 V(作为函数的参数,或作为返回类型),它与接口本身的类型相同。

      【讨论】:

        【解决方案5】:

        这是泛型的扩展。有关泛型的更多信息: http://docs.oracle.com/javase/tutorial/extra/generics/intro.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-22
          • 2012-12-19
          • 2012-11-06
          • 2011-01-14
          • 2012-10-23
          • 2012-09-01
          • 2013-05-20
          • 1970-01-01
          相关资源
          最近更新 更多