使用反射和内部类,替代冗长的if else结构。
作为测试类,发布时方便移除。

解决方案 »

  1.   

    to:wangwenyou
    能否给出相应的例子
    so thanks!
      

  2.   

    我总结出四大好处:
    1:匿名内部类的使用(这个就不用我罗索了吧)
    2:使一个类方便地访问另一个类的this指针。
       内容类可以访问外部类的this指针。
    如:
    没有用内部类的时候如下:
    class A{
        public void method(){
            B b = new B(this);
            b.doSth();
        }
        public void hello(){
            System.out.println("Hello!World!!!!");
        }
    }
    class B{
        A a;
        public B(A a){
            this.a = a;
        }
        public doSth(){
            a.hello();
        }
    }
    使用内部类以后:
    class A{
        class B{
            public doSth(){
                A.this.hello();
            }
        }
        public void method(){
            B b = new B();
            b.doSth();
        }
        public void hello(){
            System.out.println("Hello!World!!!!");
        }
    }3:对客户隐藏具体实现(这个优点体现得不明显)。
       如:某个类有Iterator getIterator();
       方法返回的是一个实现了Iterator接口的内部类。4:可以为每一个类写一个内部类来测试这个类
      (如wangwenyou(王文友) 所说)。朋友,你的明白?~
      

  3.   


    多个条件的判断,通常的处理方法是if else 然后再else if.....,直至结束。这样的做法往往导致代码冗长,而且结构不清晰,不易维护。可以采用内部类方法解决,把每一个判断作为一个类,并将判断内的代码段置入子类;每一个内部类都通过一个特定唯一的字符串构造。
        String name = "InnerClass"; // 判断条件串作为内部类名称
        String className = this.getClass().getName() + "$" + name;
        Class innerClass = Class.forName( className );
        Object[] initArgs = new Object[]{ this };
        Class[] paramTypes = new Class[]{ this.getClass() };
        Constructor innerConstr = innerClass.getConstructor( paramTypes );
        AbstractAction action = ( AbstractAction ) innerConstr.newInstance( initArgs );
        action.actionPerformed();
    相关类如下/**
     * 抽象操作类。
     */
    public class AbstractAction
        implements Action
    {
        /**
         * 执行操作。
         * @throws Exception 操作失败时抛出
         */
        public void actionPerformed()
                             throws Exception
        {
        }
    }
    内部类实现如下
    /**
     * 抽象操作类。
     */
    public class InnerClass
        implements Action
    {
        /**
         * 执行操作。
         * @throws Exception 操作失败时抛出
         */
        public void actionPerformed()
                             throws Exception
        {
            // 满足该判断分支时的操作
        }
    }
    这样,每一个内部类对应一个判断,结构变得很清晰,而且最大的优点就是开销大了,效率低了--这也是OOP的最大优点:)
    呵呵,不开玩笑了,牺牲一点性能来换取代码的可维护性,我个人认为还是很值得的。
    今天累了,在测试中的用途就不写了,抱歉。
      

  4.   

    啊? 你这样使用内在类? reflection is not type safe and it's inefficient! 内在类有许多许多好用法。在你的case, 为什么不put the instances of Action in Hashtable?  As a phylosophy of OO, you should hide as much as you can. inner class is just another way you hide your code.