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); } }}
阅读全文
0 0
- java动态添加对象&&异常链
- 动态添加/删除一个对象
- JS 动态创建、添加对象
- JavaScript对象动态添加属性
- 动态添加js对象属性
- js json对象动态添加
- java异常+对象类
- Java面向对象 异常
- JAVA面向对象-异常
- java动态添加view
- JAVA动态生成对象
- java 动态创建对象
- Js动态添加与删除Option对象
- 给IOS对象添加动态属性
- NGUI ScrollView动态添加和删除对象。
- 给IOS对象添加动态属性
- 动态添加子对象(备忘)
- js 对象动态添加属性、合并属性
- VS链接提示无法解析的外部符号 __imp__fopen解决办法
- 正则表达式匹配
- MySQL中常用的存储引擎之Innodb
- nodejs模拟表单提交
- SpringMVC工作原理
- java动态添加对象&&异常链
- [js高手之路] es6系列教程
- JSONObject与JSONArray的使用
- 软件测试笔试题
- 【JZOJ5341】【NOIP2017模拟9.2A组】密州盛宴
- LeetCode-Palindrome Number-Java
- JavaScript中click和keypress事件绑定的顺序
- 简单排序Java实现(三):希尔排序,堆排序
- 分解质因数