10

我已经使用这个网站大约 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();
}

提前致谢!

4

5 回答 5

12

接口不会自行扩展。<V extends PositionedVertex<V>>是与您的接口关联的泛型类型的绑定。它只是意味着任何实现此接口的类的泛型类型参数本身必须是PositionedVertex.

于 2013-02-13T19:29:04.363 回答
4

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

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

PositionedVertex<String>

2nd interface type,但不为1st one

于 2013-02-13T19:28:22.773 回答
1

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

于 2013-02-13T19:28:57.740 回答
0

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

于 2013-02-13T19:29:15.387 回答
0

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

于 2013-02-13T19:48:04.590 回答