public static void main(String[] args) { DynamicFields df = new DynamicFields(3); print(df); try { df.setField("d", "A value for d"); df.setField("number", 47); df.setField("number2", 48); print(df); df.setField("d", "A new value for d"); df.setField("number3", 11); print("df: " + df); print("df.getField(\"d\") : " + df.getField("d")); Object field = df.setField("d", null); // Exception } catch (NoSuchFieldException e) { e.printStackTrace(System.out); } catch (DynamicFieldsException e) { e.printStackTrace(System.out); } }
public Object setField(String id, Object value) throws DynamicFieldsException { if (value == null) { DynamicFieldsException dfe = new DynamicFieldsException(); dfe.initCause(new NullPointerException()); throw dfe; } int fieldNumber = hasField(id); if (fieldNumber == -1) { fieldNumber = makeField(id); } Object result = null; try { result = getField(id); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } fields[fieldNumber][1] = value; return result; }
public Object setField(String id, Object value) throws DynamicFieldsException { if (value == null) { // Most exceptions don't have a "cause" constructor. // In these cases you must use initCause(), // available in all Throwable subclasses. DynamicFieldsException dfe = new DynamicFieldsException(); dfe.initCause(new NullPointerException()); throw dfe; } int fieldNumber = hasField(id); if (fieldNumber == -1) fieldNumber = makeField(id); Object result = null; try { result = getField(id); // Get old value } catch (NoSuchFieldException e) { // Use constructor that takes "cause": throw new RuntimeException(e); } fields[fieldNumber][1] = value; return result; }