Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Override <T> T[] toArray(T[] a)


Автор: corewithin 14.9.2006, 11:37
Подскажите, плиз, корректную запись определения данного метода из интерфейса List в сабклассе, чтобы не было ворнингов.

Код

public ????  toArray(???? a[])
{
    return this.myList.toArray(a);
}

Автор: w1nd 14.9.2006, 12:01
Ха.
Как объявлен myList?

Автор: corewithin 14.9.2006, 12:05
Стопудово смешно...

Код

private List<AnyClass> myList = new ArrayList<AnyClass>();

Автор: LSD 14.9.2006, 13:10
Код
public <T> T[]  toArray(T[] a)
{
  return myList.toArray(a);
}

Автор: NotGonnaGetUs 14.9.2006, 14:07
Цитата(LSD @ 14.9.2006,  13:10)
Код
public <T> T[]  toArray(T[] a)
{
  return myList.toArray(a);
}

Правда работать данный код будет не всегда, т.е он type unsafe.
Класс Т должен совпадать с классом элементов в myList или являться их родителем.
Это условие нельзя проверить в compile time...

Автор: w1nd 14.9.2006, 14:09
Цитата(LSD @ 14.9.2006,  13:10)
Код
public <T> T[]  toArray(T[] a)
{
  return myList.toArray(a);
}

Ага, и ловить потом ArrayStoreException smile 

Автор: LSD 14.9.2006, 14:11
Цитата(NotGonnaGetUs @  14.9.2006,  15:07 Найти цитируемый пост)
Правда работать данный код будет не всегда, т.е он type unsafe. Класс Т должен совпадать с классом элементов в myList или являться их родителем.

И это будет полностью совпадать с контрактом метода Collection.toArray(), так что тут я думаю все нормально.

Автор: NotGonnaGetUs 14.9.2006, 14:22
Цитата(LSD @ 14.9.2006,  14:11)
И это будет полностью совпадать с контрактом метода Collection.toArray(), так что тут я думаю все нормально.

Угу.

Если честно, то меня удивил факт, что нельзя сделать использовать нотацию <T super AnyClass>. 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)