Classes com extends

2 respostas Resolvido
java
San_n

Boa tarde a todos!!

Gostaria de tirar uma dúvida com vocês que entendem mais de Java.

Vi essa implantação em um projeto no qual estou estudando mas não compreendi muito bem o que significa…
Não entendi o que significa esse A extends B dentro dos símbolos maior que … Menor que.
E depois extends de novo.
Alguém pode me ajudar a entender isso???

Public class Entity <A extends B> extends C {

}

2 Respostas

lvbarbosa
Solucao aceita

Isso é uma feature do Java Generics que serve para limitar o escopo de tipos que podem ser usados. Se você não entende como funciona o Java Generics, dá uma pesquisada antes de continuar lendo essa resposta, senão não vai fazer sentido nenhum.

Digamos que você quer implementar uma estrutura de dados qualquer, chamada Struct. Nela você quer guardar apenas números, sendo eles de qualquer tipo numérico, porque por algum motivo você precisa usar o método byteValue na implementação (e.g. Number, Double, etc.). Se você declarar a classe como: class Struct<E> { e chamar o método byteValue em algum lugar da implementação dessa classe, o código não vai compilar. Por exemplo:

class Struct<E> {
    void foo (E n) {
        System.out.println(n.byteValue());
    }
}

Esse código não compila, porque o tipo E pode ser qualquer coisa e não é garantido que ele vai ter o método byteValue.

Agora, você pode especificar para o compilador que o tipo E é qualquer tipo que herda da classe Number, que tem o método byteValue. Esse código funciona:

class Struct<E extends Number> {
    void foo (E n) {
        System.out.println(n.byteValue());
    }
}

Agora a classe Struct só pode ser utilizada com tipos que herdam de Number. Existe também a keyword super, que vai no mesmo lugar do extends, e funciona ao contrário: o tipo genérico pode ser de qualquer classe da qual o tipo específico herda.

San_n

Cara muito obrigada!!
Mesmo que eu não entendesse o Generics eu teria entendido, pq a resposta foi muito boa!!. brigadão!!

Criado 28 de julho de 2019
Ultima resposta 28 de jul. de 2019
Respostas 2
Participantes 2