Dúvida relacionada a tipos genéricos

2 respostas
bonfarj

Estou com dificuldade para perguntar, vou tentar mostrar com um exemplo:

public abstract class Filho<F extends Filho> {
    private Pai<F> pai;
    //...
}

public class Pai<F extends Filho> {
    private Set<F> filhos;
    //...
}

Isto vai funcionar, mas sempre que eu estender a classe Filho eu terei que fazer algo assim:

public class Lalala extends class Filho<Lalala> {
    //...
}

Não há uma forma de informar que este atributo pai da classe Filho deve ser tipado com a classe que estende Filho que tiver instanciada sem tipar a classe Filho? Por exemplo, se eu estou usando a classe Lalala, o atributo pai deve ser tipado para Lalala, seu atributo filhos só deve aceitar instâncias de Lalala. Escrever este último trecho de código para mim é muito estranho, preferia algo assim:

public class Lalala extends class Filho {
    //...
}

e

public abstract class Filho {
    private Pai<CLASSE_QUE_ESTENDE_FILHO> pai;
    //...
}

Entenderam a questão? Há como fazer isso?

Muito obrigado!! :)

2 Respostas

Norxs

não entendi … o que que tá errado?

bonfarj

Embora eu já esteja me convencendo de que não exista outra forma, eu acho estranho fazer isso:

public abstract class Filho<F extends Filho> { private Pai<F> pai; //... }

ou seja, tipar a classe com ela mesma. Para mim poderia haver uma palavra reservada (algo como um “this” para a instância) que indicasse isso sem precisar tipar a classe, exemplo:

public abstract class Filho { private Pai<CLASSE_QUE_ESTENDE_FILHO> pai; //... }

Dessa forma, se crio uma classe A que estende Filho, seu atributo pai só poderá ser pai de objetos da classe A, mesmo sem tipar a classe Filho.

Ficou confusa a explicação?

Abraços!

Criado 18 de novembro de 2008
Ultima resposta 20 de nov. de 2008
Respostas 2
Participantes 2