web-dev-qa-db-ja.com

Java汎用メソッドの戻り値の型

voidを返さないジェネリックメソッドがなぜこのように宣言されている(または宣言できる)のか疑問に思います。

   public static <E> void printArray( E[] inputArray ) {
     // Display array elements              
     for ( E element : inputArray ){        
        System.out.printf( "%s ", element );
     }
     System.out.println();
   }

<E>は返されたオブジェクトのタイプのようですが、メソッドは実際には何も返しません。では、この場合、具体的に、そして一般的なメソッドでの<E>の本当の意味は何ですか?

25
user975343

この質問は私の古いメモの1つに合っています。このイラストがお役に立てば幸いです。

enter image description hereenter image description here

102
Jops

<E>はジェネリック型パラメーター宣言です。これは、「このメソッドには、Eと呼ばれる単一の型パラメーターがあります。これは任意の型にすることができます」という意味です。

戻り値の型ではありません-メソッド名の直前の型パラメーター宣言のにあります。したがって、質問のprintArrayメソッドの戻り値の型はまだvoidです。

メソッド宣言の詳細については、 JLSのセクション8.4 を参照してください。

8
Jon Skeet

返されるオブジェクトのタイプではありません。これは、メソッドシグネチャのEがジェネリック型であり、具象型ではないことを示しています。これがないと、コンパイラはメソッドの引数としてEという名前のクラスを探します。

3
JB Nizet

<E>は、正式な型パラメーターと呼ばれます。メソッドの戻り値の型ではありません。基本的に、メソッドはさまざまなタイプの配列(E [] inputArray)をパラメーターとして受け入れることができると言っています。

2
Razvan

[〜#〜] E [〜#〜]この関数が呼び出すときジェン関数に渡される実際のタイプのプレースホルダとして使用されます。

[〜#〜] e [〜#〜]整数に置き換えることができると仮定します

2
Imran Tufail