Criar lista usando array e generics em java.
13/12/2019
0
Boa tarde! preciso criar uma classe lista, onde o usuário ao construir informe o tipo de objeto que a classe armazena através dos < >, e um parâmetro informando a capacidade máxima da lista eu criei assim mas da erro no construtor o código não compila.
da erro no "this.tsDalista = T [capacidade];"
public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = T [capacidade]; } }
da erro no "this.tsDalista = T [capacidade];"
Leonardo
Curtir tópico
+ 0
Responder
Post mais votado
13/12/2019
Na verdade, são três erros, observe com atenção esse detalhe aqui:
Agora olhe esse detalhe aqui:
E agora o motivo final pro código não rodar, você não pode criar um atributo de tipo genérico, crie um Object no lugar, já que tudo no java herda de object você pode tirar proveito do polimorfismo nessas situações, e simplesmente faz um type casting pro tipo genérico que você criou, assim:
O código completo corrigido ficaria assim então:
public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = T [capacidade]; //essa declaração de array está incorreta, use a palavra reservada new } } public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = new T [capacidade]; // Agora está correto } }
Agora olhe esse detalhe aqui:
public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = T [capacidade]; // a variável tsDalista não existe, escreva com L maiúsculo } } public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDaLista = T [capacidade]; // agora está certo } }
E agora o motivo final pro código não rodar, você não pode criar um atributo de tipo genérico, crie um Object no lugar, já que tudo no java herda de object você pode tirar proveito do polimorfismo nessas situações, e simplesmente faz um type casting pro tipo genérico que você criou, assim:
public class Lista<T>{ private Object[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = (T[]) Object[capacidade]; } }
O código completo corrigido ficaria assim então:
public class Lista<T>{ private Object[] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDaLista = (T[]) new Object[capacidade]; }
Sadasd
Responder
Mais Posts
13/12/2019
Leonardo
Na verdade, são três erros, observe com atenção esse detalhe aqui:
Agora olhe esse detalhe aqui:
E agora o motivo final pro código não rodar, você não pode criar um atributo de tipo genérico, crie um Object no lugar, já que tudo no java herda de object você pode tirar proveito do polimorfismo nessas situações, e simplesmente faz um type casting pro tipo genérico que você criou, assim:
O código completo corrigido ficaria assim então:
public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = T [capacidade]; //essa declaração de array está incorreta, use a palavra reservada new } } public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = new T [capacidade]; // Agora está correto } }
Agora olhe esse detalhe aqui:
public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = T [capacidade]; // a variável tsDalista não existe, escreva com L maiúsculo } } public class Lista<T>{ private T[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDaLista = T [capacidade]; // agora está certo } }
E agora o motivo final pro código não rodar, você não pode criar um atributo de tipo genérico, crie um Object no lugar, já que tudo no java herda de object você pode tirar proveito do polimorfismo nessas situações, e simplesmente faz um type casting pro tipo genérico que você criou, assim:
public class Lista<T>{ private Object[ ] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDalista = (T[]) Object[capacidade]; } }
O código completo corrigido ficaria assim então:
public class Lista<T>{ private Object[] tsDaLista; private int proximoLivre = 0; private int capacidade; public <T> Lista(int capacidade) { this.capacidade = capacidade; this.tsDaLista = (T[]) new Object[capacidade]; }
Muito Obrigado!
Responder
Clique aqui para fazer login e interagir na Comunidade :)