publicclassImposto_Model{privatedoubleinss_retido,inss_patronal;finalintALIQUOTA_1;finalintALIQUOTA_2;finalintALIQUOTA_3;publicImposto_Model(intALIQUOTA_1,intALIQUOTA_2,intALIQUOTA_3){this.ALIQUOTA_1=ALIQUOTA_1;this.ALIQUOTA_2=ALIQUOTA_2;this.ALIQUOTA_3=ALIQUOTA_3;}publicImposto_Model(){// esse construtor esta mstrando um erro na IDE}publicdoublegetInss_retido(){returninss_retido;}publicvoidsetInss_retido(doubleinss_retido){this.inss_retido=inss_retido;}publicdoublegetInss_patronal(){returninss_patronal;}publicvoidsetInss_patronal(doubleinss_patronal){this.inss_patronal=inss_patronal;}
Aquele construtor tá dando error porque você declarou as aliquotas como final e elas precisam estar inicializadas (o que está sendo feito no contrutor acima).
Faz o seguinte, declara como private. Aí tu vai ter dois contrutores, um que inicializa sem valores e outro que inicializa com valores.
J
Jederson_Andre
O meu problema é que preciso, em tempo de execução, atribuir um valor a estas constantes… e não estou conseguindo.
R
Rodrigo_Marden
Exatamente por isso que você deve declarar como private e não como final.
Depois é só atribuir os valores pelos métodos set.
publicclassImposto_Model{privatedoubleinss_retido,inss_patronal;privateintALIQUOTA_1;privateintALIQUOTA_2;privateintALIQUOTA_3;publicImposto_Model(){// esse construtor esta mstrando um erro na IDE}publicImposto_Model(intALIQUOTA_1,intALIQUOTA_2,intALIQUOTA_3){this.ALIQUOTA_1=ALIQUOTA_1;this.ALIQUOTA_2=ALIQUOTA_2;this.ALIQUOTA_3=ALIQUOTA_3;}//Você não precisa deste construtor para passar valores em tempo de execução, você deve usar os get e set para pegar e setar valores.publicdoublegetInss_retido(){returninss_retido;}publicvoidsetInss_retido(doubleinss_retido){this.inss_retido=inss_retido;}publicdoublegetInss_patronal(){returninss_patronal;}publicvoidsetInss_patronal(doubleinss_patronal){this.inss_patronal=inss_patronal;}}
J
Jederson_Andre
Por ser constantes, nao deveria manter com o modificar FINAL??
L
leonardodias9141 like
Sim, quando você já as tem de início. Assim o modificador final requer que você as declare na classe ou no construtor. Desse jeito que você quer é impossível com essa estrutura, meu conselho seria criar uma classe Aliquota que essa sim possui três atributos final e vincular ela à sua classe de imposto. Também há o problema de essa classe ser alterada, mas você pode gerar uma exception caso tente atribuir uma Aliquota há um objeto que já o possui.
classImpostoModel{privatedoubleinssRetido,inssPatronal;privateAliquotasaliquotas;publicImpostoModel(Aliquotasaliquotas){this.aliquotas=aliquotas;}publicImpostoModel(){aliquotas=null;}publicvoidsetAliquota(Aliquotasaliquotas){if(this.aliquotas!=null){thrownewException("Aliquotas not NULL");}else{this.aliquotas=aliquotas;}}publicdoublegetInssRetido(){returninssRetido;}publicvoidsetInssRetido(doubleinssRetido){this.inssRetido=inssRetido;}publicdoublegetInssPatronal(){returninssPatronal;}publicvoidsetInssPatronal(doubleinssPatronal){this.inssPatronal=inssPatronal;}}
P
pmlm
As variaveis podem perfeitamente ser final. O problema é que elas precisam de um valor e, se o objecto for criado no teu constructor sem parâmetros as variáveis não vão ter valor.
Deves eliminar esse construtor ou atribuir um valor às variáveis dentro dele.
C
Claydiberto
Boa noite amigo. Vou tentar explicar o que sei.
Uma Constante não pode iniciar sem valor. Deve ser declarado na declaração ou no construtor (O valor não pode ser passado por parâmetro).
Veja o que eu consegui:
publicclassImpostoModel{privatedoubleinss_retido,inss_patronal;finalintALIQUOTA_1=2;finalintALIQUOTA_2=3;finalintALIQUOTA_3;//declarado no construtor// construtor padraopublicImpostoModel(){this.ALIQUOTA_3=3;// exemplo de declaracao}
“final significa que a variável é uma constante… não poderá receber outro valor e deverá ser iniciada com algum valor.” erico_kl
As variáveis serão privadas e não terão Setters, logo, não serão modificadas.
_
Um abraço.
P
pmlm
E essas variáveis podem perfeitamente ser final desde que no construtor padrão, se declarado, tenham valor atribuido
privatefinalintaliquota1;privatefinalintaliquota2;privatefinalintaliquota3;publicImpostoModel(){this.aliquota1=0;//um valor defaultthis.aliquota2=0;//um valor defaultthis.aliquota3=0;//um valor default}publicImpostoModel(intaliquota1,intaliquota2,intaliquota3){this.aliquota1=aliquota1;this.aliquota2=aliquota2;this.aliquota3=aliquota3;}