Использование дженериков с коллекциями Джакарты - PullRequest
0 голосов
/ 16 апреля 2009

Этот код прекрасно компилируется в Java <= 1.4. Java 1.6 суки и стоны с предупреждением: </p>

"Метод add (Object) относится к необработанному типу Collection. Ссылки на универсальный тип Collection должны быть параметризованы"

import org.apache.commons.collections.Buffer;
import org.apache.commons.collections.BufferUtils;
import org.apache.commons.collections.buffer.UnboundedFifoBuffer;

private Buffer connectqueue = BufferUtils.blockingBuffer(new UnboundedFifoBuffer());

...

connectqueue.add(new Conn(this, address, port));

Как настроить код, чтобы предупреждение исчезло без добавления директивы @SupressWarnings?

Проблема в том, что буфер коллекций Jakarta Commons не является универсальным, но расширяет универсальный интерфейс java.util.Collection.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2009

Вы не можете. До тех пор, пока Jakarta Commons не будет поддерживать дженерики (которые они, вероятно, не будут иметь, потому что они хотят иметь возможность строить и на более старых версиях Java), вы должны подавлять (или жить с) предупреждение.

В качестве альтернативы есть форк коллекций Commons, который поддерживает дженерики , и Google также имеет библиотеку коллекций . Однако я не проверял, есть ли у кого-нибудь из них буфер, и для этого потребуется переключить API.

Если ни один из ваших кодов не использует возможности языка после 1.4, вы можете установить уровень языка компилятора на «1.4», но это кажется даже менее осуществимым (или желательным).

Вероятно, просто придерживайтесь @ SupressWarnings.

0 голосов
/ 21 апреля 2009

Как уже упоминалось выше, вы можете использовать форк коллекций Jakarta, который предоставит вам буферный класс, который использует дженерики и не выдаст вам предупреждения http://collections.sourceforge.net/api/org/apache/commons/collections/Buffer.html

...