7

私は次のようなクラスを持っています:

public class MyConverter {
    public <T> T convert (Object o, String typeidentifier, T dummy)
    {
         ... do some conversions such as a java array to an ArrayList or vice versa
         ... based on a typeidentifier syntax similar to Class.getName() but which
         ... embeds information about generic subtypes
    }
}

そして、次のような一般的なことを実行できるようにしたい:

int[] ar = {...};
ArrayList<Integer> dummy = null;
Integer elem = MyConverter.convert(ar, "java.util.ArrayList<Integer>", dummy)
                  .get(15);

つまり、Tin convert自体が汎用インスタンスである可能性があり、この目標を機能させるには、完全に型指定されたダミーを渡す必要があることがわかりました。これはArrayList.class、Javaコンパイラに十分な情報を提供しないためですArrayList<Integer>Class<T> dummyclsの代わりにT dummy

私は何かが足りないのですか?ダミーを必要とせずに変換の書き込みと呼び出しの両方を行う方法はありますか?

4

3 に答える 3

10

Javaにタイプを推測させるのではなく、呼び出しでタイプを指定します。

Integer elem = MyConverter.<ArrayList<Integer>>convert(ar, "java.util.ArrayList<Integer>");

このリンクは、この(クールな)構文について説明しています。

于 2012-06-26T17:26:31.157 に答える
5

この種はArrays.asListのように見え、ネイティブ配列を取り、それをArrayListに変換します。

実装は次のようになります。

 public static <T> List<T> asList(T... a) {
    ArrayList<T> arr = new ArrayList<T>();
    for (T item: a) {
        arr.add(item);
    }
    return arr;
}
于 2012-06-26T17:20:12.277 に答える
0

convertメソッドで変換したいロジックを記述し、それをジェネリック型にキャストして返すことができます。

   public class MyConverter {
        public static void main(String[] args) {
            Integer i = MyConverter.convert();
            System.out.println(i);
        }

        @SuppressWarnings("unchecked")
        private static <T> T convert() {
            Integer i = new Integer(10);
            return (T)i;
        }
    }
于 2019-07-11T07:12:16.677 に答える