Ci sono molte altre domande SO che parlano di generici che compilano OK con il compilatore di Eclipse ma non javac (ad esempio Java: Generics handled differenlty in Eclipse and javac e Generics compiles and runs in Eclipse, but doesn't compile in javac) - tuttavia questo sembra leggermente diverso.errore javac: tipi non convertibili con generici?
ho un enum
classe:
public class LogEvent {
public enum Type {
// ... values here ...
}
...
}
e ho un'altra classe con un metodo che prende in oggetti arbitrari di tipi discendenti da Enum
:
@Override public <E extends Enum<E>> void postEvent(
Context context, E code, Object additionalData)
{
if (code instanceof LogEvent.Type)
{
LogEvent.Type scode = (LogEvent.Type)code;
...
Questo funziona bene in Eclipse, ma quando eseguo una costruzione pulita con ant
, ricevo un paio di errori, uno sulla riga instanceof
, l'altro sulla linea di trasmissione:
443: inconvertible types
[javac] found : E
[javac] required: mypackage.LogEvent.Type
[javac] if (code instanceof LogEvent.Type)
[javac] ^
445: inconvertible types
[javac] found : E
[javac] required: com.dekaresearch.tools.espdf.LogEvent.Type
[javac] LogEvent.Type scode = (LogEvent.Type)code;
[javac] ^
Perché questo accade e come posso aggirare questo problema in modo che venga compilato correttamente?
grazie. Perché è brutto? È semplice e ha un basso costo di runtime. –
@Jason S: È brutto perché non riesco a capire perché è richiesto. –
Questo è un bug noto, IIRC. In realtà, ci sono dozzine di bug correlati con nessuno di loro ancora risolto. – maaartinus