0

このような宣言:

  class A<X extends Number & List> {  } 

は許可されていますが、このような宣言は許可されていません。

  class A<? extends Number & List> {  }

Java がそれを制限する理由について論理的な説明はありますか?

&実際の違いは何ですか

      <T extends Number>  
     & <? extends Number>?
4

3 に答える 3

3

を使用した場合、typeパラメーターでは何もでき<? extends Number & List>なくなります。それは完全に役に立たないでしょう。

同様に、? extends Number数値を拡張する型を参照する必要がなく、名前を付ける必要がない場合の特殊なケースに対処できます。

于 2012-03-28T19:35:44.923 に答える
1

のような型パラメーターの要点はT、クラス内で型として使用できるようにすることです。そこにあるワイルドカードは何を意味するのでしょうか? どこでも使用できない場合、なぜ型パラメーターを使用する必要があるのでしょうか?

于 2012-03-28T22:07:18.427 に答える
0

ジェネリッククラスとインターフェイスの宣言には、TやUなどの型パラメーターが必要です。はワイルドカードであり、それ自体が汎用的なメソッドパラメータに適しています。

class Foo<T extends Number & List> {
    void doStuff(List<T> items) {
        // ...
    }

    void doMoreStuff(List<? extends OutputStream> streams) {
        // ...
    }
}

doStuff()はList<T>、TがクラスFooの型パラメーターである場合に操作することを示します。それで:

class Weird extends Number implements List {
    //
}

Foo<Weird> f = new Foo<Weird>();
f.doStuff(...);   // wants a List<Weird>

fでdoMoreStuff()を呼び出すと、、、、などのタイプのものを渡すことができますList<OutputStream>List<FilterOutputStream>List<ByteArrayOutputStream>

于 2012-03-28T19:39:29.027 に答える