Estoy recorriendo ArrayList<Bar>
. Foo
extiende Bar
. Estoy tratando de encontrar una instancia de Foo
en la lista.Foo no se puede convertir 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;
}
}
Si esta sección del código se ejecute me sale este error:
java.lang.ClassCastException: com.me.Foo cannot be cast to com.me.Foo
// stack
Sin embargo, en otro lugar, tengo un método que devuelve una instancia de Bar
y puedo comprobar para ver si se trata de una instancia de Foo
usando instanceof
y luego fundido Bar
a Foo
sin problemas:
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;
}
¿Qué es diferente aquí?
Aquí es el verdadero origen del problema: http://pastie.org/private/jhyhovn7mm4ghxlxsmweog
Estoy trabajando con una API llamada Bukkit que permite plugins personalizados para los servidores para un juego llamado Minecraft. La documentación se puede encontrar here para aquellos realmente interesados en el tema. Iré a los foros oficiales de Bukkit y probaré mi pregunta allí, ya que se está convirtiendo más en un problema específico de API, pero dejaré todo esto aquí para aquellos que estén interesados en el problema.
¿ambos heredan de la misma clase base? – Asdfg
@Asdfg * They * being what? –
¿podría proporcionar la demostración de IDEOne para su problema? http://ideone.com –