Уважаемые, такой вопрос - хочу установить у класса поле в определенное значение, но процесс постоянно выкидывается с java.lang.IllegalArgumentException.
Код | public class A { private int i = 5; private String j = "Ahoj"; }
|
Код | public class B { private A test;
public B () { test = new A (); }
public void changeA (String val) { String propertyname = "i"; Class c = this.test.getClass (); Field f = isThereField (c, propertyname);
if (f != null) { try { f.setAccessible (true); f.set (this.test, val); } catch (Exception ex) { System.out.println (ex.toString ()); } } }
private Field isThereField (Class c, String property) { Field field = null;
Field[] fields = c.getDeclaredFields ();
for (int i = 0; i < fields.length; i++) { if (fields [i].getName ().equals (property)) { field = fields [i];
break; } }
return field; }
public static void main (String[] args) { B b = new B ();
b.changeA ("20"); } }
|
На f.set (this.test, val); все падает с java.lang.IllegalArgumentException. Дебаг говорит, что объект test в порядке, val тоже. Поиски в нете дали такой результат: "A Field permits widening conversions to occur during a get or set access operation, but throws an IllegalArgumentException if a narrowing conversion would occur.", только я не совсем понимаю отсюда 1) в чем проблема 2) что мне надо сделать чтобы ее устранить... . Подскажите кто может 
PS. Немного изменила пример. Суть не изменилась и ошибка тоже осталась. |