Sto passando attraverso ArrayList<Bar>
. Foo
estende Bar
. Sto cercando di trovare un'istanza di Foo
nell'elenco.Foo non può essere trasmesso a Foo
ArrayList<Bar> list = new ArrayList<Bar>();
// fill list with items that are instances of Foo and Bar
for (int i = 0; i < list.size(); i++)
{
Bar bar = list.get(i);
if (bar.getClass().getName().equals("com.me.Foo")) // "if(bar instanceof Foo)" never passes
{
System.out.println("bar is an instance of Foo");
Foo foo = (Foo) bar;
}
}
Se questa sezione di codice viene eseguito ottengo questo errore:
java.lang.ClassCastException: com.me.Foo cannot be cast to com.me.Foo
// stack
Tuttavia, in un altro posto, ho un metodo che restituisce un'istanza di Bar
e posso controllare per vedere se si tratta di un'istanza di Foo
utilizzando instanceof
e poi gettato Bar
a Foo
senza problemi:
Bar bar = returnBar(); // returns an instance of Bar, but the variable
// it returns could be an instance of Foo
if (bar instanceof Foo)
{
System.out.println("bar is an instance of Foo");
Foo foo = (Foo) bar;
}
Cosa c'è di diverso qui?
Ecco la vera fonte del problema: http://pastie.org/private/jhyhovn7mm4ghxlxsmweog
Sto lavorando con un'API chiamata Bukkit che permette di plugin personalizzati per i server per un gioco chiamato Minecraft. La documentazione può essere trovata here per quelli veramente interessati al problema. Vado nei forum ufficiali di Bukkit e provo la mia domanda lì, poiché sta diventando più un problema specifico dell'API, ma lascerò tutto questo qui per coloro che erano interessati al problema.
entrambi ereditano dalla stessa baseclass? – Asdfg
@Asdfg * Loro * essere cosa? –
potresti fornire la demo IDEOne per il tuo problema? http://ideone.com –