FYI: type inference issue
От: bolshik Россия http://denis-zhdanov.blogspot.com/
Дата: 26.03.07 08:00
Оценка: 15 (4)
Спеку не ковырял на предмет объяснения, почему происходит именно так, а не иначе, но само знание о таком моменте может пригодиться.

В следующем примере (1) компилится (с последующим ArrayStoreException в рантайм), (2) не компилится:

public class BBB {

    public static void main(String[] args) throws Exception {
        String[] array = new String[1];
        store(array, 1); // (1)

        Collection<String> collection = new ArrayList<String>();
        store(collection, 2); // (2)
    }

    private static <T> void store(T[] array, T element) {
        array[0] = element;
    }

    private static <T> void store(Collection<T> collection, T element) {
        collection.add(element);
    }
}



Лечится:

вариант 1
public class BBB {

    public static void main(String[] args) throws Exception {
        String[] array = new String[1];
        BBB.<String>store(array, 1);
    }

    private static <T> void store(T[] array, T element) {
        array[0] = element;
    }
}


вариант 2
public class BBB {

    public static void main(String[] args) throws Exception {
        String[] array = new String[1];
        store(array, 1);
    }

    private static <T, S extends T> void store(T[] array, S element) {
        array[0] = element;
    }
}
http://denis-zhdanov.blogspot.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.