Pessoal,
Não lembro o nome do padrão de criação, porém sei como utiliza-lo.
Vou demonstrar aqui de forma simples a minha dúvida para ver se tem alguma solução.
abstract class Componente {
String largura;
String altura;
public String getLargura() {
return largura;
}
public String getAltura() {
return altura;
}
public abstract static class Construtor {
String largura;
String altura;
public Construtor comLargura(String largura) {
this.largura = largura;
return this;
}
public Construtor comAltura(String altura) {
this.altura = altura;
return this;
}
}
}
public final class Texto extends Componente {
private Texto() {}
String valor;
public String getValor() {
return valor;
}
public static class Construtor extends Componente.Construtor implements Montavel<Texto> {
String valor;
Boolean quebraDelinha;
@Override
public Texto montar() { // método da interface Montavel
Texto texto = new Texto();
texto.valor = valor;
texto.largura = largura;
texto.altura = altura;
return texto;
}
public Construtor comValor(String valor) {
this.valor = valor;
return this;
}
}
}
Pessoal, o que eu gostaria aqui é de aproveitar os métodos definidos na Componente$Construtor.
Porém o que esses métodos me retornam é o Componente$Construtor que não tem acesso ao método montar() de Montavel.
Tentei colocar a Componente$Construtor para implementar a interface Montavel, porém não tive sucesso, pois o tipo Genérico teria que ser definido na classe Componente$Construtor.
Minha solução atual foi sobrescrever todos os métodos da classe Componente$Construtor em Texto$Construtor e mudar o seu tipo de retorno para Texto$Construtor.
Tem alguma forma em que eu não precisaria sobrescrever esses métodos na minha classe Construtor Filha?
Obrigado!