T是此代码中的类还是接口? - java

What is <? super T> syntax?

我正在阅读此答案,这使我消除了一些疑问,但我不明白这一行中的一件事:

T extends Comparable< ? super T>

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

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

java大神给出的解决方案

事实是,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)相比,您不会经常使用它们。

因此,人们之所以说“ T是实现Comparable的类”,仅仅是因为这是更可能的情况。

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Tomcat找不到直接放置在classes文件夹下的类 - java

我有以下JSP:<%@ page import="foo.*" %> <html> <body> The page count is: <%=Counter.getCount()%> </body> </html> 我在包Counter中有一个foo类,该类存储在: …

如何修改休眠的SQL查询? - java

我有点好奇,有没有办法修改hibernate的核心,以便我可以自定义生成的SQL query。例如,在生成的查询中添加功能以使用connect by prior(oracle)或我要自定义的任何其他子句。 java大神给出的解决方案 起初,这样的问题总是在我心中敲响警钟。你被警告了...AFAIK,hibernate使用所谓的dialects进行特定的优化。…

用Java构建大批量数据处理工具 - java

Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。 3年前关闭。 Improve this question 我正在尝试使用Java构建ETL工具。 ETL工具用于对大量数据(关系型和其他类型)进行批量读取,…

用Java封装对象? - java

private中的Java提供类级别的封装。可以封装一个对象吗?还是这样做徒劳?例如,如果我们将一个类定义为 public class Person { private String ssn; private ArrayList<Person> friends = new ArrayList<Person>(); public voi…