BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #18329同步于 2011/5/14
Java机器人发帖

bottom??????

wks
2011/5/14镜像同步0 回复
比如这个 public static Integer div(int a, int b) { if (b==0) { return null; } else { return a/b; } } 如果处理的过程中出现错误,就返回null;否则返回正确的结果。这种方法可以用于处理异常。好处就是: public static void main(String[] args) { Integer a = div(1,2); Integer b = div(3,4); Integer c = div(5,0); Integer d = div(7,8); } 这样,即使a,b,c,d其中有一个值计算不正常(比如这次是c无法正常计算),所有的计算也能依次进行。有时候在复杂的计算中,允许“一部分不成功”,但是“其余部分如果能计算就要尽量计算”。 如果抛出异常 public static int div(int a, int b) { if (b==0) { throw new ArithmeticException("Divide by zero"); } else { .... } } 虽然也能处理异常,但是使用的时候,必须随时处理所有的异常。这偏偏不是我期望的。但是,好处是,exception里可以保存错误信息“Divide by zero”。 =============== 我设想有另一种解决方案:设定一种对象:Bottom。它具备一个性质: - 它是所有类的子类,它实现所有的接口。所以,它可以被赋给任何类型的变量。 - 对它的任何操作都是失败的。 根据这个定义,null就是一种Bottom。因为: - ArrayList<String> a = null; HashMap<Integer,Double> b = null; URL u = null; String s = null; Integer i = null; 看吧,null可以被赋值给任何变量(当然,仅限于引用变量) - a.add("hello"); (抛出NullPointerException) b.put(3,3.14); (抛出NullPointerException) u.openStream(); (抛出NullPointerException) s.length(); (抛出NullPointerException) i.intValue(); (抛出NullPointerException) 看吧,对它的任何操作都是失败的。 之所以叫bottom,是因为它处于继承树的最底层——它是所有类的子类。 但是,我想扩展null。让这个null里可以包含错误信息。 class Bottom extends everything_else implements all_interfaces { private String message; // getters and setters; } 然后,div函数可以改成这样: public static Integer div(int a, int b) { if (b==0) { return new Bottom("Divide by zero"); // 由于Bottom是任何类的子类,不应该有类型错误。 } else { return a/b; } } public static void main (String[] args) { Integer a = div(5,0); if (a instanceof Bottom) { System.err.println(((Bottom)a).getMessage()); // 打印“Divide by zero” } } Java应该不能直接这样定义。借助CGLib呢? 抛砖引玉。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。