Реализует ли java стирание типов в определенных пользователем общих классах? - PullRequest
1 голос
/ 10 июня 2009

Предположим, у меня есть класс и я хочу использовать его где-нибудь в качестве универсального типа:

class MyList<T>
{
    T[] list=T[10];

    public void add(T element)
    { 
        list[0]=element;
    }
}

После компиляции удаляет ли она информацию о своем типе, как в случае универсальных коллекций?

Мне не нужно нигде использовать этот код, поэтому, пожалуйста, не концентрируйтесь на поиске ошибок. Я просто хочу задать общий вопрос через этот код, который после компиляции будет перечислять переменную экземпляра типа объекта класса.

Ответы [ 2 ]

8 голосов
/ 10 июня 2009

Да , of couse.

Также обратите внимание, что:

  1. Параметр типа класса должен соответствовать универсальному типу в его теле
  2. Вы не можете создать универсальный массив , но вы можете объявить его. Основанием для этого является то, что , допускающее создание универсальных массивов, сделает java более не типичной для безопасности Вместо этого используйте arraylist.
5 голосов
/ 10 июня 2009

Я даже не уверен, что это скомпилируется. По крайней мере, должно быть предупреждение.

Проблема здесь в том, что массивы ковариантны. Обобщения нет. Это означает, что генерики не сохраняют информацию о типе во время выполнения. Массивы делают.

И да, это относится ко всем универсальным типам, включая определяемые пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...