Por que não posso usar super na declaração de uma classe genérica

5 respostas
D

por que não posso usar super na declaração de uma classe genérica, por que a classe com extends compila e a classe com super não?

class NaoCompila<T super Number> {}

class Compila<T extends Number> {}

5 Respostas

charleston10

A classe NaoCompila não esta estendendo uma outra classe,

O comando Super você precisará usá-la toda vez que desejar referenciar um recurso (método/membro) de uma superclasse…
E vc esta fazendo isso na classe Compila

A

tá certo tudo tens a informação de qual erro ta dando? ou poderias enviar o código completo? se for este tá tudo certinho .

charleston10
AutorMensagem alexmonassa tá certo tudo tens a informação de qual erro ta dando? ou poderias enviar o código completo? se for este tá tudo certinho .

Essa classe nao vai compilar pq vc nao esta estendendo o objeto T para poder usar os recursos dela atraves do Super..
class NaoCompila {}

por isso nao compila..

super() faz uma chamada ao construtor padrão da classe-pai.

Exemplo:
public class Filha extends Pai {  
  
    public Filha() {  
        super();  
        System.out.println("Chamando o construtor da classe-filha...");  
  
    }  
      
    public static void main(String[] args) {  
        new Filha();  
    }  
      
}
Ataxexe

E, se compilasse, não faria sentido algum. Você não poderia afirmar que T seria um Number porque ele poderia ser qualquer objeto acima na hierarquia de classes.

Com o extends, você pode afirmar, com certeza, que T é, pelo menos, um Number. Isso faz sentido.

E onde o super faz sentido? Filtrando coleções, por exemplo:

Aqui podemos passar um filtro de AnnotatedElement para filtrar uma coleção de Field ou Method (que implementam AnnotatedElement).

Ataxexe
charleston10:
AutorMensagem alexmonassa tá certo tudo tens a informação de qual erro ta dando? ou poderias enviar o código completo? se for este tá tudo certinho .

Essa classe nao vai compilar pq vc nao esta estendendo o objeto T para poder usar os recursos dela atraves do Super..
class NaoCompila {}

por isso nao compila..

super() faz uma chamada ao construtor padrão da classe-pai.

Exemplo:
public class Filha extends Pai {  
  
    public Filha() {  
        super();  
        System.out.println("Chamando o construtor da classe-filha...");  
  
    }  
      
    public static void main(String[] args) {  
        new Filha();  
    }  
      
}

Você está certo, mas pelo motivo errado. O super que ele se referiu foi ao uso do super na tipagem genérica.

Criado 20 de novembro de 2012
Ultima resposta 20 de nov. de 2012
Respostas 5
Participantes 4