I nomi local classes vengono utilizzati molto raramente, in genere le classi locali sono anonime. Qualcuno sa perché il codice sottostante genera un avvertimento del compilatore?Java: classe locale e generici, perché avvisare il compilatore?
public class Stuff<E> {
Iterator<E> foo() {
class InIterator implements Iterator<E> {
@Override public boolean hasNext() { return false; }
@Override public E next() { return null; }
@Override public void remove() { }
}
return new InIterator();
}
}
L'avviso è in new InIterator()
e dice
[unchecked] unchecked conversion
found : InIterator
required: java.util.Iterator<E>
Se la classe, invariata, è in forma anonima, o se si è fatto un membro, l'avviso va via. Tuttavia, come classe locale con nome, richiede una dichiarazione class InIterator<E> implements ...
per l'avviso di andare via.
Cosa sta succedendo?
Solo per curiosità, il mio compilatore non si lamenta di questo avviso ... Che JVM stai usando? –
Aggiornamento Sun Java 6 12 – Yardena