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>
の本当の意味は何ですか?
この質問は私の古いメモの1つに合っています。このイラストがお役に立てば幸いです。
<E>
はジェネリック型パラメーター宣言です。これは、「このメソッドには、E
と呼ばれる単一の型パラメーターがあります。これは任意の型にすることができます」という意味です。
戻り値の型ではありません-メソッド名の直前の型パラメーター宣言の後にあります。したがって、質問のprintArray
メソッドの戻り値の型はまだvoid
です。
メソッド宣言の詳細については、 JLSのセクション8.4 を参照してください。
返されるオブジェクトのタイプではありません。これは、メソッドシグネチャのE
がジェネリック型であり、具象型ではないことを示しています。これがないと、コンパイラはメソッドの引数としてE
という名前のクラスを探します。
<E>は、正式な型パラメーターと呼ばれます。メソッドの戻り値の型ではありません。基本的に、メソッドはさまざまなタイプの配列(E [] inputArray)をパラメーターとして受け入れることができると言っています。
[〜#〜] E [〜#〜]この関数が呼び出すときジェン関数に渡される実際のタイプのプレースホルダとして使用されます。
[〜#〜] e [〜#〜]は整数に置き換えることができると仮定します