Eu estou com uma enumeração(enum) que tem como parâmetro no construtor um objeto que extende em outros.
Esse parâmetro começa como null e eu seto ele como sendo alguma classe que extende esse objeto do parâmetro.
Uma outra classe pega algum dado da enumeração e manda esse objeto parâmetro executar um método dele.
O problema é que esse método está no nível de abstração mais baixo, ou seja, nesse nível de abstração que ele está definido ele não reconhece este método.
Então surgiu a seguinte dúvida:
Existe alguma maneira de eu mandar esse parâmetro resgatar seu nível de abstração mais baixo(que é o que ele era quando o passei pelo set deste enum) e então reconhecer seus métodos?
PS: esse problema surgiu porque inicialmente os dados deste enum tem parametro null (_Exemplo(null) ) , então se eu não abstraisse esse parâmetro ficaria ambiguo.Se alguém souber outra maneira de resolver este problema também agradeço.
Eu estou com uma enumeração(enum) que tem como parâmetro no construtor um objeto que extende em outros.
Esse parâmetro começa como null e eu seto ele como sendo alguma classe que extende esse objeto do parâmetro.
Uma outra classe pega algum dado da enumeração e manda esse objeto parâmetro executar um método dele.
O problema é que esse método está no nível de abstração mais baixo, ou seja, nesse nível de abstração que ele está definido ele não reconhece este método.
Então surgiu a seguinte dúvida:
Existe alguma maneira de eu mandar esse parâmetro resgatar seu nível de abstração mais baixo(que é o que ele era quando o passei pelo set deste enum) e então reconhecer seus métodos?
PS: esse problema surgiu porque inicialmente os dados deste enum tem parametro null (_Exemplo(null) ) , então se eu não abstraisse esse parâmetro ficaria ambiguo.Se alguém souber outra maneira de resolver este problema também agradeço.
Cara, sinceramente, não entendi exatamente o que você precisa.
O método que você quer acessar está privado ou você está usando alguma interface que não tem esse método na assinatura?
Se tiver outra maneira de fazer isso também seria de grande ajuda.
el_loko_pepe
Deu certo agora, valeu.
WellingtonRamos
el_loko_pepe:
Eu estou com uma enumeração(enum) que tem como parâmetro no construtor um objeto que extende em outros.
Esse parâmetro começa como null e eu seto ele como sendo alguma classe que extende esse objeto do parâmetro.
Uma outra classe pega algum dado da enumeração e manda esse objeto parâmetro executar um método dele.
O problema é que esse método está no nível de abstração mais baixo, ou seja, nesse nível de abstração que ele está definido ele não reconhece este método.
Então surgiu a seguinte dúvida:
Existe alguma maneira de eu mandar esse parâmetro resgatar seu nível de abstração mais baixo(que é o que ele era quando o passei pelo set deste enum) e então reconhecer seus métodos?
PS: esse problema surgiu porque inicialmente os dados deste enum tem parametro null (_Exemplo(null) ) , então se eu não abstraisse esse parâmetro ficaria ambiguo.Se alguém souber outra maneira de resolver este problema também agradeço.
Cara, sinceramente, não entendi exatamente o que você precisa.
O método que você quer acessar está privado ou você está usando alguma interface que não tem esse método na assinatura?
WellingtonRamos
Agora entendi o que você quer :)
Vou colocar um exemplo de como deve fazer:
packagebr.com.testes;publicclassEnumTest{publicstaticvoidmain(String[]args){Veiculos[]values=Veiculos.values();for(Veiculosveiculo:values){try{veiculo.getVeiculo().ligarLimpadorParaBrisa();}catch(ComponentExceptione){System.out.println("O Veiculo "+veiculo+" falhou em ligar o limpador");}}}}enumVeiculos{//Enumcarro(newCarro()),moto(newMoto());//Corpo comum a todos os veículosprivateVeiculov;Veiculos(Veiculov){this.v=v;}publicVeiculogetVeiculo(){returnv;}}interfaceVeiculo{voidligarLimpadorParaBrisa()throwsComponentException;}classCarroimplementsVeiculo{publicvoidligarLimpadorParaBrisa()throwsComponentException{System.out.println("Liguei parabrisa");}}classMotoimplementsVeiculo{publicvoidligarLimpadorParaBrisa()throwsComponentException{thrownewComponentException("Não existe limpador de parabrisa em moto");}}classComponentExceptionextendsException{publicComponentException(Stringmessage){super(message);}}
Estou fazendo outro exemplo. logo postarei aqui.
WellingtonRamos
Segue o outro exemplo.
packagebr.com.testes;publicclassEnumTest{publicstaticvoidmain(String[]args){VeiculosAutomotores[]values=VeiculosAutomotores.values();for(VeiculosAutomotoresveiculo:values){try{veiculo.ligarLimpadorParaBrisa();}catch(ComponentExceptione){System.out.println("O Veiculo "+veiculo+" falhou em ligar o limpador");}}}}enumVeiculosAutomotoresimplementsVeiculo{carro(){publicvoidligarLimpadorParaBrisa()throwsComponentException{System.out.println("Liguei parabrisa");}},moto(){publicvoidligarLimpadorParaBrisa()throwsComponentException{thrownewComponentException("Não existe limpador de parabrisa em moto");}};}interfaceVeiculo{voidligarLimpadorParaBrisa()throwsComponentException;}classComponentExceptionextendsException{publicComponentException(Stringmessage){super(message);}}
WellingtonRamos
Veja que no primeiro, criei uma interface e as classes que as implementam e depois passei por parâmetro para cada item do enum.
Já o segundo exemplo, o próprio enum implementa a interface e cada item faz sua própria implementação do método da interface.