3

ジェネリックメソッドについて読んでいます。クラスレベルで型を宣言せず、ジェネリックメソッドを使用している場合、構文はどういうわけかこのようになることを調査しました

public <T> void makeArrayList(T t)

ここで、次の点を結論付けることができます。戻り値の型の前にプレースホルダーを宣言しないと、コンパイル時エラーが発生します。私はかなり混乱しています。私は他のトピックJava Generics: Generic type defined as return type onlyを調べていますが、かなり混乱しているようです。私の質問は

  1. コンパイラはコレクションの型をどのように認識していますか?
  2. return-type の前に型を宣言する必要があるのはなぜですか?

誰かがこの点について詳しく説明できますか?

4

2 に答える 2

6

をヘッダーに入れない場合<T>、関数はそれが存在することを知る方法がありませんT

Oracle のドキュメントに記載されている型推論に関する簡単な説明:

コンパイラは、実際の引数の型に基づいて型引数を推測します。通常、呼び出しを正しい型にする最も具体的な型引数を推測します。

参考文献: Java Generics FAQ、特にJava Generic Methods
のセクションを 読むことを強くお勧めします。ジェネリック メソッドに関する Oracle のチュートリアルも役に立ちますが、他のリファレンスほど広範囲ではありません。

于 2013-08-11T20:18:32.660 に答える
3

1. コンパイラーはコレクションの型をどのように認識していますか?

タイプは、各メソッド呼び出しで渡すタイプです。メソッドの宣言には具象型はありません。それが、ジェネリック メソッドを宣言することの意味です。

2. return-type の前に型を宣言する必要があるのはなぜですか?

これは、ジェネリック メソッドを宣言するための言語の構文だからですJLS § 8.4.4を参照してください。

于 2013-08-11T20:19:44.410 に答える