Java: удивительный трюк с Generic

javaНесколько раз встречался со следущей проблемой: есть вот такая с позволения сказать коллекция:

public class Foo {
private T[] data;
}

Как выделить память для массива data ?! Ну не вызывать же в самом деле new T[size] ?! Оказывается решение есть:

public class Foo {
private T[] data;
public Foo(){
data = (T[]) new Object[2];
}
}

Замечу, что (T[]) new Object[2] не должно выкинуть type cast exception так как компилятор «удаляет» тип Generic’a (т.н. type erasure) и оперирует данными только типа Object.

Отмечено

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: