如果范围之一是类,则必须首先在java泛型中指定它。为什么? - java

我指的是这个java docs。
如果边界之一是类,则必须先指定。我的感觉是应该以任何顺序允许它。

为什么Java有这样的限制?这背后有什么具体原因吗?

多界

前面的示例说明了将类型参数与
单界,但类型参数可以有多个界:

具有多个界限的类型变量是所有类型的子类型
在边界中列出。如果界限之一是一类,则必须是
首先指定。例如:

Class A { /* ... */ } 
interface B { /* ... */ }
interface C { /* ...
 */ }

class D <T extends A & B & C> { /* ... */ }

如果未首先指定绑定A,则会出现编译时错误:

 class D <T extends B & A & C> { /* ... */ }  // compile-time error ,but why ?

参考方案

首先,那里只能有一个 class 。每个Java类(java.lang.Object除外,在特殊情况下作为层次结构的根除外)只能从单个其他类继承。可以有多个接口,但最多只有一个类。这极大地简化了类型层次结构和对象构造过程的处理。

鉴于此,语言设计师决定必须在界限内首先列出该类(如果确实存在)。实际上,没有什么深层原因-编译器可以只执行一个没有顺序的类限制就可以了-但是这样做确实使事情变得更容易些,因为有一个简单的规则:如果您使用的是类作为通用类型绑定,请放在第一位。

Java-非泛型类扩展了泛型类 - java

我想知道如何(如果可能)创建一个类,它是泛型类的特定类型。具体来说,我有一个实现所有必需方法的abstract class Stack<Type>,我想有一个class StackInteger,而StackInteger的实例也是Stack<Integer>的实例。我看到我可以做这样的事情:class StackInteger { …

java:继承 - java

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

Java:从静态方法获取继承的类的类 - java

我在Java中遇到以下问题:我有一个基类和一个派生类,并且在基类中有一个方法。当我通过Derived调用Base的foo方法时,我想获得Derived的类。如果可以通过这种方式完成,则foo方法可以是通用的。class Base { static void foo() { // I want to get Derived class here // Deri…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …