Alguém sabe porque que não funciona?
Aparece:
Found: T
Required: Class or Array
Eu já procurei aqui no forum so que quando eu entro no tópico o internet explorer fecha
Obrigado vlw
Alguém sabe porque que não funciona?
Aparece:
Found: T
Required: Class or Array
Eu já procurei aqui no forum so que quando eu entro no tópico o internet explorer fecha
Obrigado vlw
Como você está usando?
public <T extends Building> ArrayList<T> getBuildings()
{
ArrayList<T> foundList = new ArrayList<T>();
Iterator i = buildings.iterator();
while ( i.hasNext() )
{
Building n = ( Building )i.next();
if ( n instanceof T )
foundList.add( ( T ) n );
}
}
Infelizmente, isso é uma limitação de como o java é implementado.
O tipo T, depois da compilação, simplesmente desaparece. O java encara tudo como object e faz casts automaticamente. Fizeram assim para manter a compatibilidade do código, mas isso impede várias coisas como reflexão, criação de objetos ou tentativas de usar instanceof com T.
Agora, porque no seu método você não retorna um List<Building> mesmo?
Me parece mais lógico fazer assim:
public List<Building> getBuildings(Class<? extends Building> buildingClass) {
List<Building> foundList = new ArrayList<T>();
for (Building n : buildings) {
if (buildClass.isAssignableFrom(n)) {
foundList.add(n );
}
}
}
Geramente, usamos esses “T extends” para especificar tipos de listas em parâmetros.
Um parâmetro do tipo List<T extends Mamifero> aceitaria uma List<Homem> ou um List<Cachorro>. Um parâmetro com List<T super Homem> aceitaria um List<Mamifero> ou List<Cordado>. Faz pouco sentido retornar um List<T extends qualquer coisa> como parâmetro. Nesse caso, retorne um List do tipo certo, já que esse list admitirá o tipo, ou filhos desse tipo no seu interior.
[quote=Polimorphism]
public <T extends Building> ArrayList<T> getBuildings()
{
ArrayList<T> foundList = new ArrayList<T>();
Iterator i = buildings.iterator();
while ( i.hasNext() )
{
Building n = ( Building )i.next();
if ( n instanceof T )
foundList.add( ( T ) n );
}
}
[/quote]
O Vini já respondeu mas só queria resaltar que:
Ok, vlw a todos consegui fazer aqui
Não Esqueça de editar o Título adicionando a tag [RESOLVIDO] no final do Título , Depois tirar suas duvidas.