ビデオ: Alexander IRL 2024
Javaはプログラミングには最適ですが、時には創造的にする必要があります。これを行うには、ワイルドカード型のパラメータを使用できます。
public void addItems(ArrayList list)
//メソッドの本文が表示されない
}
思考の質問:次の文がコンパイルされますか?
addItems(新しいArrayList());
<! - 1 - >
String
は
Object
のサブタイプであるため、驚くべきことです。したがって、オブジェクトの
ArrayList
を受け入れると言うパラメータは、
ArrayList
の文字列を受け入れると考えるでしょう。
残念ながら、仮引数型の場合、継承はそれほど機能しません。代わりに、
ワイルドカードと呼ばれるジェネリックの別の機能を使用する必要があります。
<!要約すると、 ArrayList
の任意の型を受け入れるメソッドを作成する場合は、次のようにメソッドをコーディングする必要があります。public void addItems(ArrayList list )
この場合、疑問符は、あなたがここでどんな種類の型でもコーディングできることを示します。
これは継承とほぼ同じですが、実際にパラメータを特定のスーパークラスのコレクションに限定したい場合はどうすればよいでしょうか?たとえば、
HourlyEmployee
および
SalariedEmployee
という2つのサブクラスを持つ
Employee
スーパークラスを持つ給与計算システムで作業しているとします。このメソッドでは、
従業員
オブジェクト、
HourlyEmployee
オブジェクト、または
SalariedEmployee
オブジェクトの
ArrayList
その場合、次のように
extends
句をワイルドカードに追加できます:
public void addItems(ArrayList list)
Employee
、
HourlyEmployee
、または
SalariedEmployee
の
ArrayList
を持つaddItems
メソッドをaddItemsメソッドに追加します。
addItems
メソッドが正式な型パラメータ
を使用して要素の型を指定するジェネリッククラスに現れたとすると、次のようになります。 addItems
メソッドは、
E
型の
ArrayList
またはそのサブクラスのいずれかを受け入れるようにします。
public void addItems(ArrayList list)
ここで、ワイルドカード型パラメータ
は、
ArrayList
メソッドが宣言されていることを意味します。 E
またはE 999を拡張する任意のタイプのものとすることができる。