-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDynamicFields.java
More file actions
94 lines (91 loc) · 2.92 KB
/
Copy pathDynamicFields.java
File metadata and controls
94 lines (91 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
class DynamicFieldsException extends Exception{}
public class DynamicFields{
private Object[][] fields;
public DynamicFields(int initialSize){
fields = new Object[initialSize][2];
for(int i=0;i<initialSize;i++){
fields[i] = new Object[]{null, null};
}
}
public String toString(){
StringBuilder result = new StringBuilder();
for(Object[] obj:fields){
result.append(obj[0]);
result.append(": ");
result.append(obj[1]);
result.append("\n");
}
return result.toString();
}
private int hasField(String id){
for(int i=0;i<fields.length;i++){
if(id.equals(fields[i][0]))
return i;
}
return -1;
}
private int getFieldNumber(String id) throws NoSuchFieldException{
int fieldNum = hasField(id);
if(fieldNum==-1)
throw new NoSuchFieldException();
return fieldNum;
}
private int makeField(String id){
for(int i=0;i<fields.length;i++){
if(fields[i][0]==null){
fields[i][0] = id;
return i;
}
}
Object[][] tmp = new Object[fields.length+1][2];
for(int i=0;i<fields.length;i++){
tmp[i] = fields[i];
}
for(int i=fields.length;i<tmp.length;i++){
tmp[i] = new Object[]{null, null};
}
fields = tmp;
return makeField(id);
}
public Object getField(String id) throws NoSuchFieldException{
return fields[getFieldNumber(id)][1];
}
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 static void main(String[] args){
DynamicFields df = new DynamicFields(3);
System.out.println(df);
try{
df.setField("d", "A value for d");
df.setField("number", 47);
df.setField("number2", 48);
System.out.println(df);
df.setField("d", "A new value for d");
df.setField("number3", 11);
System.out.println("df: "+df);
System.out.println("df.getField(\"d\"): "+df.getField("d"));
Object field = df.setField("d", null);
}catch(NoSuchFieldException e){
e.printStackTrace(System.out);
}catch(DynamicFieldsException e){
e.printStackTrace(System.out);
}
}
}