gpt4 book ai didi

java - 如果其中一个边界是一个类,则必须首先在 java 泛型中指定它。为什么?

转载 作者:搜寻专家 更新时间:2023-11-01 02:49:59 24 4
gpt4 key购买 nike

我指的是这个 java docs .如果其中一个边界是一个类,则必须首先指定它。我觉得它应该允许任何顺序。

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

Multiple Bounds

The preceding example illustrates the use of a type parameter with a single bound, but a type parameter can have multiple bounds:

A type variable with multiple bounds is a subtype of all the types listed in the bound. If one of the bounds is a class, it must be specified first. For example:

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

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

If bound A is not specified first, you get a compile-time error:

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

最佳答案

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

鉴于此,语言设计者决定类必须首先列在边界中(如果它存在的话)。这实际上没有深层原因——编译器可以在没有顺序的情况下强制执行唯一一个类的限制——但它确实让事情更容易教授,因为有一个简单的规则:如果你是使用一个类作为泛型类型绑定(bind),把它放在第一位

关于java - 如果其中一个边界是一个类,则必须首先在 java 泛型中指定它。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13117384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com