オブジェクト指向プログラミングでは、クラス間の階層関係が一般的です。基本の Animal クラスを拡張し、それぞれが異なる動作を持つさまざまな動物のサブクラスの例を考えてみましょう。
ただし、これらの動物のコレクションを操作する場合、特定の動物を取得して操作するには、面倒な型キャストが必要になることがよくあります。この問題を軽減するために、メソッドの戻り値の型をジェネリックにするためのオプションを検討します。
実行時の戻り値の型決定にクラス パラメーターを利用する
1 つのアプローチには、クラスを渡すことが含まれます。パラメータをメソッドに追加し、予想される戻り値の型を動的に指定します。これにより、プレースホルダー パラメーターの必要性を回避し、キャストに正しいクラスを利用できるようになります。
public <T extends Animal> T callFriend(String name, Class<T> type) { return type.cast(friends.get(name)); }
このメソッドは次のように呼び出されます。
jerry.callFriend("spike", Dog.class).bark(); jerry.callFriend("quacker", Duck.class).quack();
利点と欠点
このソリューションはコンパイラの警告をバイパスしますが、ジェネリック以前のキャストとよく似ています。実践。これは安全性を強化するものではなく、提供されたクラスが実際の戻り値の型と一致していることを確認する責任が生じます。
代替アプローチ
残念ながら、ジェネリックはコンパイル時に制限されたままです。型チェックにより、instanceof または同様の手法を使用せずに戻り値の型を動的に推測することが不可能になります。
以上がジェネリックスはオブジェクト指向プログラミングにおける柔軟なメソッドの戻り値の型をどのように改善できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。