ジェネリック プログラミングの領域では、現在使用されているジェネリック型の特定のクラスを決定することが重要になることがよくあります。使用。ただし、Java のジェネリック型消去メカニズムは、この取り組みに課題をもたらしています。
この問題に対処するために、現実世界のシナリオを模倣した例を詳しく調べてみましょう。
public class MyGenericClass<T> { public void doSomething() { // Imagine a 3rd party library call that expects a Class object T bean = (T) someObject.create(T.class); } }
残念ながら、上記のコードは、「型パラメーター T のクラス リテラルが不正です」エラーで失敗します。これは、ジェネリック型情報が実行時に消去され、T.class の直接使用が不可能になるためです。
では、どうすればこの障害を克服できるでしょうか?実行可能な解決策として、目的のクラスをパラメータとして受け入れる静的ファクトリ メソッドを導入するという回避策が浮上しました。
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<>(clazz); } private MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { T instance = clazz.newInstance(); } }
このアプローチにより、オブジェクトの作成中にジェネリック クラスを明示的に指定でき、実行時の消去を効果的に回避できます。問題。ただし、これには欠点があります。定型コードが追加され、API が若干複雑になります。それにもかかわらず、クラス タイプの決定が不可欠な場合には、依然として有効な回避策です。
以上がJava でジェネリック型のクラスを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。