Scusa se questo è stato già spiegato, ma non ho trovato thread simili ovunque nel web.Nessun errore del compilatore relativo ai cast incompatibili
Oggi ho aperto una classe di progetto in IDE e ho visto un errore (sottolineatura rossa), anche se il progetto è stato compilato correttamente.
Quindi, il codice è:
public interface DatasourceImplementation<T extends Entity> {
....
}
public interface Datasource<T extends Entity> {
....
}
public interface DsContext {
@Nullable
<T extends Datasource> T get(String name);
}
Ed ora noi chiamiamo questo metodo come questo:
DatasourceImplementation dsImpl = getDsContext().get("dsName");
Idea13 mi dà errore (tipi incompatibili) - Penso che sia giusto.
Idea14 non mostra errori qui.
JDK lo compila senza errori - questo è triste.
Devo dire che nella nostra classe di implementazione del progetto l'interfaccia A implementa sempre l'interfaccia B (forse spiega perché Idea14 dice che è OK), ma a mio parere non può giustificare questo comportamento - perché generalmente posso creare classe che implementa A e non implementa B. Voglio la tipizzazione statica nel mio codice, non voglio vedere le eccezioni del cast di classi di runtime.
Quindi, chi ha torto qui?
Aggiornamento. Aggiungere uno screenshot con le classi reali (non sono sicuro che spiegherà qualcosa di più, è proprio lo stesso che ho descritto)
Questo è davvero interessante, potremmo vedere un programma semplificato completo? –
@RichardTingle Ho aggiunto uno screenshot di queste 4 classi semplificate - è sufficiente? – AdamSkywalker
Inserisci il codice come testo. Primo pensiero: si sta utilizzando il tipo non elaborato Datasource nel tipo di ritorno generico del metodo 'get()'. –