2

コンストラクター (の 1 つ) が、使用するリストの実装を決定できるようにしたいと考えています。私が思いついたコードは、警告なしで問題なくコンパイルされますが、IDE (Eclipse) はコメント行に文句を言います。なぜ、どのように型を推測するのですか?

public class GenericClassTest<T> {

private List<T> list;

//stuff...

public GenericClassTest(Class<? extends List> listCreator)
        throws InstantiationException, IllegalAccessException {
    this.list = listCreator.newInstance(); // how to infer type T? where
                                            // does diamondoperator go?
}

public static void main(String[] args) throws InstantiationException,
        IllegalAccessException {
    GenericClassTest<Integer> one = new GenericClassTest<>(ArrayList.class);
    GenericClassTest<String> two = new GenericClassTest<>(LinkedList.class);
    one.list.add(13);
    two.list.add("Hello");
    System.out.println(one.list);
    System.out.println(two.list);
}


}
4

2 に答える 2

0

コードにジェネリックを含める場合は、次のようにしてください。

class Sample {
    static <T,L extends List<T>> L newList(Class<L> clazz) 
        throws InstantiationException, IllegalAccessException {
        return clazz.newInstance();
    }

    static <T> void mainCode() throws InstantiationException, IllegalAccessException {
        List<T> list;
        list = Sample.<String, ArrayList<String>>newList(ArrayList.class);      
    }
于 2013-05-15T13:04:10.253 に答える