java动态添加对象&&异常链

来源:互联网 发布:学生护手霜推荐 知乎 编辑:程序博客网 时间:2024/06/05 01:14
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};//field[i]表示第i行的所有元素        }    }    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();    }    //检验id是否在数组中    private int hasField(String id){        for(int i=0;i<fields.length;i++)            if(id.equals(fields[i][0]))                return i;        return -1;    }    //返回id的行    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);//递归,直到找到null,id赋值给[i][0]    }    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){            System.out.println("aaa");            throw new RuntimeException();        }        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);            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);        }    }}
原创粉丝点击