|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 392
|
[JAVA] Reflection
ciao ragazzi, ho un problemino con questo codice facile-facile:
Codice:
Manager boss = new Manager("Paul Brown", 1000, 500);
Class c = boss.getClass();
try
{
Field field = c.getField("bonus");
Integer newBonus = field.getInt(boss);
newBonus = newBonus + 200;
field.setInt(boss, newBonus);
}
catch(NoSuchFieldException nsfe)
{
System.out.println(nsfe.getMessage());
nsfe.printStackTrace();
}
catch(IllegalAccessException iae)
{
System.out.println(iae.getMessage());
iae.printStackTrace();
}
Integer newBonus = field.getInt(boss); Codice:
Exception in thread "main" java.lang.IllegalArgumentException: Attempt to get java.lang.Integer field "dynamicbinding.Manager.bonus" with illegal data type conversion to int at sun.reflect.UnsafeFieldAccessorImpl.newGetIllegalArgumentException(Unknown Source) at sun.reflect.UnsafeFieldAccessorImpl.newGetIntIllegalArgumentException(Unknown Source) at sun.reflect.UnsafeObjectFieldAccessorImpl.getInt(Unknown Source) at java.lang.reflect.Field.getInt(Unknown Source) at reflection.Main.main(Main.java:30) grazie a tutti
__________________
lol wut |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Dice che "bonus" non è un "int". Prova con un "nonna":
... Field field = c.getField("bonus"); System.out.println(field.getType()); e vedi di che tipo è. Magari è un BigInteger o un BigDecimal o un float.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 392
|
mi sembra abbastanza ovvio che sia un integer, visto che il campo l'ho dichiarato io come public Integer bonus. infatti il metodo getType() conferma: class java.lang.Integer
__________________
lol wut |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Posto che un Integer non è un int, la soluzione è parimenti ovvia.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 392
|
temo di non capire. un Integer non e' un int, ma qui si tratta unicamente di Integer: bonus e' un Integer e newBonus pure. se forse ti riferisci al fatto che il metodo getInt(String s) restituisce un int, la riga di codice
int newBonus = f.getInt(boss); o anche Integer newBonus = (Integer)f.getInt(boss); da comunque lo stesso errore. quale sarebbe la soluzione?
__________________
lol wut Ultima modifica di xplorer87 : 25-07-2007 alle 16:53. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
ll problema è "getInt". Si aspetta che il campo sia un byte, short, char o int.
Se "bonus" è di tipo Integer, allora: Integer newBonus = (Integer)field.get(boss);
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2002
Messaggi: 392
|
perfetto, c'ero arrivato un nanosecondo fa
grazie ancora!
__________________
lol wut |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:35.


















