例外をスロー新しい例外例外チェーンとして知られている元の例外情報を保持し、キャプチャした後。
私たちは財産のTrowable原因を使用する必要がある元の例外情報を保持するが、ほかのエラー、例外とのRuntimeExceptionのコンストラクタパラメータ原因が設けられていません。パラメータなしでこのコンストラクタと同様の原因は異常我々は、のは、どのように表示するようにフィールドの動的な例を追加してみましょうあなたは生の例外を追加するときinitCause()メソッドを使用する必要があります。
package test;
class DynamicFieldException extends Exception{
}
public class DynamicField<K,V> {
private Object[][] fields;
public DynamicField(int initSize) {
//初始化数组
fields = new Object[initSize][2];
for (int i = 0; i < initSize; i ++) {
fields[i] = new Object[]{null,null};
}
}
private int hasField(K id) {
if (id == null ) {
return -1;
}
for (int i = 0; i < fields.length; i ++) {
if (id.equals(fields[i][0])) {
return i;
}
}
return -1;
}
public V getField(K id) throws NoSuchFieldException, DynamicFieldException {
if (id == null) {
DynamicFieldException e = new DynamicFieldException();
e.initCause(new NullPointerException());
throw e;
}
int index = hasField(id);
if (index == -1) {
throw new NoSuchFieldException();
}
return (V) fields[index][1];
}
public int makeField(K id) {
for (int i = 0;i < fields.length;i ++) {
if (fields[i][0] == null) {
fields[i][0] = id;
return i;
}
}
Object[][] tem = new Object[fields.length + 1][2];
for (int i = 0;i < fields.length ;i ++) {
tem[i] = fields[i];
}
for (int i = fields.length; i < tem.length; i ++) {
tem[i] = new Object[]{null,null};
}
fields = tem;
return makeField(id);
}
public boolean setField(K id,V value) throws DynamicFieldException {
int index = hasField(id);
if (index != -1) {
throw new DynamicFieldException();
}
if (value == null) {
DynamicFieldException e = new DynamicFieldException();
e.initCause(new NullPointerException());
throw e;
}
int i = makeField(id);
fields[i][1] = value;
return true;
}
public static void main(String[] args) {
DynamicField<String,String> df = new DynamicField(1);
try {
df.setField("mfs","MFS");
//df.setField("hello",null);
df.getField("mfs");
//df.getField("hello");
//df.getField(null);
} catch (DynamicFieldException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}