понедельник, 15 февраля 2010 г.

Почему генерики Java - отстой

class Data< T > {
protected T[] array;

public Data(T x, T y) {
array = (T[]) new Object[2];
array[0] = x;
array[1] = y;
}

public T[] get() {
return array;
}

}

Попробуйте создать Data и передать туда List. Данный код скомпилируется, - даже не сомневайтесь. Вопрос только в том, что вы будете делать с методом get() - вы не сможете вытащить ничего через этот метод! Вы будете постоянно получать исключение об инвалидном касте.

1 комментарий:

  1. Меня можно назвать некропостером, но Вы просто неправильно готовите код :)

    import java.util.*;

    class Data {
    protected T[] array;
    public Data(T x, T y) {
    array = (T[]) new Object[2];
    array[0] = x;
    array[1] = y;
    }
    public T[] get() {
    return array;
    }
    public static void main(String[] args) {
    List l1 = new ArrayList();
    l1.add("hello"); l1.add("world");
    Data d = new Data(l1, l1);
    System.out.println(d.get());
    System.out.println(d.get()[0]);
    System.out.println( ( (List) (d.get()[0]) ).get(0) );
    }
    }

    Скорее всего get() у Вас не сработал потому, что Вы не в том месте кастовали объект к List'у

    ОтветитьУдалить