Não sei se meu problema é básico ou avançado, mas como eu posso mudar o valor de um int usando Reflection? Eu consigo fazer um Integer que valia 2 valer 3, e se tratado como tal. Porém o mesmo não é possível ao meu ver com int. =/
Claro que é, do mesmo jeito que você faz pro Integer vai fazer com o int também. Mostre o seu código ou o que você já tentou ai.
C
Carinha
importjava.lang.reflect.*;publicclassprincipal{/** * @param args */publicstaticvoidmain(String[]args){Fieldfld;try{fld=Integer.class.getDeclaredField("value");fld.setAccessible(true);fld.set(2,3);}catch(NoSuchFieldExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(SecurityExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IllegalArgumentExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IllegalAccessExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}
É apenas um exemplo simples, eu utilizo ele para alterar o valor de um Integer. Então caso eu queira imprimir o Integer 2, ele será tratado como 3. Porém o mesmo não funciona para int =/
Mauricio_Linhares
Isso realmente não pode, você não pode alterar o valor de uma literal, porque ela é, bem, uma literal
E
entanglement
importjava.lang.reflect.*;classClasseComInt{publicClasseComInt(intx){this.x=x;}publicfinalintx;publicintgetX(){returnx;}}classUsoIndevidoReflection{publicstaticvoidmain(String[]args){Integerdois=2;System.out.printf("O valor de 'dois' eh %d %n",dois);try{Fieldfield=Integer.class.getDeclaredField("value");field.setAccessible(true);field.set(dois,Integer.valueOf(3));}catch(Exceptionex){}System.out.printf("O valor de 'dois' agora eh %d - veja bem, %d %n",dois,2);// Setando o valor de um 'int'. Nesse caso o campo é 'final' portanto não poderia ser mudado!ClasseComIntc=newClasseComInt(5);System.out.printf("O valor de c.x eh %d %n",c.getX());try{Fieldfield=ClasseComInt.class.getDeclaredField("x");field.setAccessible(true);field.set(c,Integer.valueOf(7));}catch(Exceptionex){ex.printStackTrace();}System.out.printf("O valor de c.x agora eh %d%n",c.getX());}}