Autor Tema: ayuda con java  (Leído 319 veces)

theteam

  • Miembro Avanzado
  • ****
  • Mensajes: 180
  • Sistema Operativo:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Navegador:
  • Firefox 3.5.7 Firefox 3.5.7
    • Ver Perfil
ayuda con java
« en: Febrero 10, 2010, 10:26:13 »
este error me esta volviendo loco desde ayer, a ver si alguien saber por que es...

voy a tratar de ser lo mas claro posible, ya que hay algunas clases de por medio.
Código: [Seleccionar]
public class Nodo<E> implements Position<E>
{
...
protected ListaSimplementeEnlazada<Nodo<E>> hijos;
...
public ListaSimplementeEnlazada<Nodo<E>> getHijos()
    {return hijos;}
...
}
         
la clase Position<E> no es muy importante, solo es importante saber que Nodo<E>implementa Position<E>.
la ListaSimplementeEnlazada, si bien la uso, tampoco es de importancia, es una Lista de tipo generico E.
Código: [Seleccionar]
public class Arbol<E> implements Tree<E>
{
...
public Iterable<Position<E>> children(Position<E> v) throws InvalidPositionException
    {return checkPosition(v).getHijos();}
...
}
         
el metodo checkPosition(v) devuelve un Nodo<E>, y tira excepcion si no es valido (por eso la InvalidPositionException).

mi problema esta en "return checkPosition(v).getHijos();"
me tira el siguiente error: "Type mismatch: cannot convert fromListaSimplementeEnlazada<Nodo<E>> toIterable<Position<E>> Arbol.java /Arboles/arbol line 38Java Problem"

cabe aclarar que la listaSimplementeEnlazada es Iterable<E>.
intentando encararlo de otra forma, probe con esto que tambien me da error:
"ListaSimplementeEnlazada<Position<E>> hijos=new ListaSimplementeEnlazada<Nodo<E>>();"
me dice que no se puede convertir de Lista...<Nodo<E>> a Lista...<Position<E>>

lo cual no entiendo, porque Nodo<E> implementa a Position<E>.
alguien sabe cual puede ser el error??

graciela!

Un foro para todos

ayuda con java
« en: Febrero 10, 2010, 10:26:13 »

niko

  • Administrador
  • Miembro Experto
  • *
  • Mensajes: 483
  • Sexo: Masculino
  • Sistema Operativo:
  • Windows XP Windows XP
  • Navegador:
  • Firefox 3.5.7 Firefox 3.5.7
    • Ver Perfil
Re:ayuda con java
« Respuesta #1 en: Febrero 10, 2010, 10:38:01 »
theteam: según recuerdo de mis épocas de ayudante de EDA, el problema es que java no maneja bien la herencia genérica. ListaSimplementeEnlazada hereda de Iterable y Nodo hereda de Position, pero eso java no lo banca ni a palos.
El caso de "ListaSimplementeEnlazada<Position<E>> hijos=new ListaSimplementeEnlazada<Nodo<E>>();" es similar, estás usando herencia genérica.
O sea, java no se banca esto en cuanto al auto casteo que debería hacer.
La solución a tu problema es hacer el casteo a mano. Por ejemplo, para el método children, te creas una lista de Position<E> y le metés uno a uno los Nodo<E>. Si no me equivoco, eso tiene que funcionar.
Estaría piola buscar algún artículo que aclare un poco más al respecto, porque es cualquiera que java no se bance esto, pero hasta donde yo recuerdo, era así.

theteam

  • Miembro Avanzado
  • ****
  • Mensajes: 180
  • Sistema Operativo:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Navegador:
  • Firefox 3.5.7 Firefox 3.5.7
    • Ver Perfil
Re:ayuda con java
« Respuesta #2 en: Febrero 10, 2010, 10:41:05 »
que poronga (con el perdon del vocabulario)
porque si tenes 5000 mil hijos los tenes que mover 1 por 1, cuando de la otra forma lo podes hacer sin costo casi.
yo rompiendome la cabeza y es un error de java??? grrrrrrrrrrrr.
obviamente no deberia ser asi. muy mala onda realmente

niko

  • Administrador
  • Miembro Experto
  • *
  • Mensajes: 483
  • Sexo: Masculino
  • Sistema Operativo:
  • Windows XP Windows XP
  • Navegador:
  • Firefox 3.5.7 Firefox 3.5.7
    • Ver Perfil
Re:ayuda con java
« Respuesta #3 en: Febrero 10, 2010, 10:45:11 »
Yo no diría que es un error, sino que es un mecanismo que no soporta, xD. De cualquier manera, si encontrás algún link que hable bien al respecto, estaría bueno que lo pongas, porque yo no estoy 100% seguro de que sea así.