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.

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

Leonardo

Responder

Post mais votado

13/12/2019

Na verdade, são três erros, observe com atenção 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]; //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

Sadasd
Responder

Mais Posts

13/12/2019

Leonardo

Na verdade, são três erros, observe com atenção 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]; //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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar