| 58 | return fields[getFieldNumber(id)][1]; |
| 59 | } |
| 60 | public Object setField(String id, Object value) |
| 61 | throws DynamicFieldsException { |
| 62 | if(value == null) { |
| 63 | // Most exceptions don't have a "cause" |
| 64 | // constructor. In these cases you must use |
| 65 | // initCause(), available in all |
| 66 | // Throwable subclasses. |
| 67 | DynamicFieldsException dfe = |
| 68 | new DynamicFieldsException(); |
| 69 | dfe.initCause(new NullPointerException()); |
| 70 | throw dfe; |
| 71 | } |
| 72 | int fieldNumber = hasField(id); |
| 73 | if(fieldNumber == -1) |
| 74 | fieldNumber = makeField(id); |
| 75 | Object result = null; |
| 76 | try { |
| 77 | result = getField(id); // Get old value |
| 78 | } catch(NoSuchFieldException e) { |
| 79 | // Use constructor that takes "cause": |
| 80 | throw new RuntimeException(e); |
| 81 | } |
| 82 | fields[fieldNumber][1] = value; |
| 83 | return result; |
| 84 | } |
| 85 | public static void main(String[] args) { |
| 86 | DynamicFields df = new DynamicFields(3); |
| 87 | System.out.println(df); |