此代码中的类还是接口?

问题描述 投票:1回答:2

What is <? super T> syntax?

我正在阅读此答案,这使我消除了一些疑问,但我对此行一无所知:

T extends Comparable< ? super T>

该帖子回复中的每个人都解释说T 实现 Comparable<T or T's superclass>;但是有书面的扩展,所以T是Comparable的子接口,而不是子类,那么为什么所有的回复都将实现作为动词?

[我唯一的猜测是,他们都暗示T是一个对象,其静态类型是Comparable的子接口,但是动态类型实际上是可比较的实现类,是吗?

java generics interface
2个回答
0
投票

T可以是接口类型或常规类类型;无论哪种方式,它都会“扩展”超类型。

特殊关键字implements仅在声明类并列出其支持的接口时使用。 (即使在那里,也没有真正的理由让Java needs使用不同的关键字;我们可以轻松地想象一个并行的Universe,其中单个extends子句用于列出零个或一个超类以及零个或多个超接口,并且Java根据列出的类是接口对它进行分类,但是这个决定早在引入泛型和通配符之前就已经确定了。)


0
投票

事实是,T可以是实现Comparable的类, Comparable的子接口。通用约束语法中使用的单词extends与类继承子句中的单词extends含义不同。

下面的代码演示了两种情况:

interface Foo {}
interface Bar extends Foo {}
class Baz implements Foo {}

public static <T extends Foo> void f(T t) {

}

Bar bar = new Bar() {};
f(bar); // compiles!
Baz baz = new Baz();
f(baz); // compiles!

但是,作为实现T的类的Comparable比作为Comparable的子接口的可能性要大得多。 JDK中Comparable的唯一子接口是:

ChronoLocalDate, ChronoLocalDateTime<D>, Chronology, ChronoZonedDateTime<D>, Delayed, Name, Path, RunnableScheduledFuture<V>, ScheduledFuture<V>

[与实现Comparable的类,例如InstantString相比,您不会经常使用。

© www.soinside.com 2019 - 2024. All rights reserved.