4

私はこのJava docsを参照していました。 境界の 1 つがクラスの場合は、最初に指定する必要があります。私が感じているのは、どのような順序でも許可する必要があるということです。

なぜJavaにそのような制限があるのですか? これには具体的な理由がありますか?

複数の境界

前の例は、単一の境界を持つ型パラメーターの使用を示していますが、型パラメーターは複数の境界を持つことができます。

複数の境界を持つ型変数は、境界にリストされているすべての型のサブタイプです。境界の 1 つがクラスの場合は、最初に指定する必要があります。例えば:

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 ?
4

4 に答える 4

1

クラスとは別に、インターフェイスをグループ化するだけかもしれません。

がクラスの場合T、次のようになります。

public class T extends A implements B, C {

しかし、ジェネリックには がなくimplements、 だけextendsです。したがって、制約は、最初にクラス自体をリストし、次にキーワードがないためにインターフェースをリストすることだけになる可能性がありますimplements

于 2012-10-29T07:59:57.513 に答える
0

私は、"A type variable with multiple bounds is a subtype of all the types listed in the bound."Javaが理由となるクラス宣言でextends Firstを示すように求めているようです。(一方、クラスは他の 1 つのクラスしか拡張できません)

于 2012-10-29T07:38:21.857 に答える
0

JLS # 4.4. Type Variables

型パラメーターとして宣言されたすべての型変数には境界があります。型変数に対して境界が宣言されていない場合は、Object が想定されます。境界が宣言されている場合、次のいずれかで構成されます。

  • 単一の型変数T、または
  • クラスまたはインターフェース型のT後にインターフェース型が続く可能性がありますI1 & ... & In
于 2012-10-29T07:19:58.660 に答える