問題の概要:ArrayList<SomeClass>
型パラメーター (たとえば など) を持つクラスを、型パラメーターとしてジェネリック メソッド
に渡したいと考えています。
メソッドがあるとしましょう:
public static <T> T getGenericObjectFromJson(String json, Class<T> genericType){
// details unimportant, basically returns an object of specified type
return JsonParser.fromJson(json, genericType);
}
もちろん、このメソッドは、どの種類のクラスでも問題なく機能します。たとえば、次のようにメソッドを呼び出すことができます。
getGenericObjectFromJson(jsonString, User.class)
問題:私はこれができないことを発見しました:
getGenericObjectFromJson(jsonString, ArrayList<User>.class)
構文的に、これは明らかに無効です。ただし、このようなことをどのように達成できるかはわかりません。もちろん、 を渡すことはできますがArrayList.class
、ジェネリック型を追加すると、構文的に有効ではなくなり、それを回避する方法が思いつきません。
唯一の直接的な解決策は、次のようなものです (かなり間抜けに思えます)。
getGenericObjectFromJson(jsonString, new ArrayList<User>().getClass())
ただし、とにかくジェネリック型を失うことになり、未知の型の ArrayList を返すだけです (ただし、キャストすることはできます)。さらに、不必要にオブジェクトをインスタンス化します。
これまでの私の唯一の解決策は、次のように、インスタンス化できるジェネリック型パラメーターを含むクラスでそのメソッドをラップすることでした。
public class JsonDeserializer<T>...
この場合、getGenericObjectFromJson
メソッドはクラスのジェネリック型を使用します。
質問:最終的に、型パラメーターを使用してクラスを渡すことができない理由と、私が試みたことを達成する方法があるかどうかに興味があります。
いつものように、この質問に問題がある場合はお知らせください。