Typecastando um generic type

Olás,

alguém sabe como (ou ‘se’) podemos fazer algo do tipo:

public interface Ring {
  public void doesNothing();
}

public interface TabajaraRing extends Ring {
  public void doesLessThanNothing();
}

public interface RingBearer {
  public List<SimpleRing> getRingList();
}

public interface TabajaraRingBearer extends RingBearer {
  public void whatever();
}

public class Bilbo implements TabajaraRingBearer {
  
  private List<TabajaraRing> iRingList;

  public void whatever(){}

  public List<SimpleRing> getRingList() {
   // return iRingList;                              dá erro de types
    return (List<SimpleRing>)iRingList;    //tbm dá erro de types
  }
}

Enfim, o Bilbo quer honrar o contrato RingBearer, implementando o método public List getRingList(). Ele tem uma List internamente.

Como retornar a iRingList?

Filipe

Vocë vai tem que fazer um unsafe cast para funcionar. A situação é a mesma que usando arrays.

Se você mostrar no seu código o que é uma SimpleRing, talvez a gente consiga ajudar :slight_smile:

public interface Ring {
   public void doesNothing();
 }
 
 public interface TabajaraRing extends Ring {
   public void doesLessThanNothing();
 }
 
 public interface RingBearer {
   public List<Ring> getRingList();
 }
 
 public interface TabajaraRingBearer extends RingBearer {
   public void whatever();
 }
 
 public class Bilbo implements TabajaraRingBearer {
   
   private List<TabajaraRing> iRingList;
 
   public void whatever(){}
 
   public List<Ring> getRingList() {
    // return iRingList;                              dá erro de types
     return (List<Ring>)iRingList;    //tbm dá erro de types
   }
 }

Ae mister_m, consertado. Como vc faria o retorno então?

Consertado onde? Ainda não tá explicado o que é o SimpleRing…

Não tem SimpleRing!!! Onde vc tá vendo simplering kra?

:slight_smile:

Aqui :slight_smile:

[quote=Filipe Silva] public interface RingBearer { public List&lt;SimpleRing&gt; getRingList(); }
[/quote]

Kra, vc é um compilador. troque SimpleRing por Ring e ‘voila’

[quote=Filipe Silva]Meu, eu acabei de postar o código de novo kra, esqueça a primeira listagem homi de deus

:P[/quote]

Eu sei, isso tá na segunda. Antes de achar que eu estou errado, verifique se não é você que está :wink:

Ok, ok, vc venceu. Mas agora tá certo né? E ae? como vc faria o retorno?

Mude a primeira declaração para (não testado):

  public interface RingBearer {
    public List<? extends Ring> getRingList();
  }

Ooops, desculpa, isso também não resolve. Você vai precisar de algo como:

  public interface RingBearer&lt;T extends Ring&gt; {
    public List&lt;T&gt; getRingList();
  }

Kra, funcionou na medida. Muito obrigado e foi mal pelos erros.

Filipe