当前位置:  技术问答>java相关

烂铁:Inner Class的使用?

    来源: 互联网  发布时间:2015-05-29

    本文导语:  请问:Inner Class 除了在事件委托时经常使用以外,还在那里较常使用? | 我总结出四大好处: 1:匿名内部类的使用(这个就不用我罗索了吧) 2:使一个类方便地访问另一个类的this指针。  ...

请问:Inner Class 除了在事件委托时经常使用以外,还在那里较常使用?

|
我总结出四大好处:
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(王文友) 所说)。

朋友,你的明白?~

|

多个条件的判断,通常的处理方法是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的最大优点:)
呵呵,不开玩笑了,牺牲一点性能来换取代码的可维护性,我个人认为还是很值得的。
今天累了,在测试中的用途就不写了,抱歉。

    
 
 

您可能感兴趣的文章:

  • MYSQL使用inner join 进行 查询/删除/修改示例
  • Java中,Inner class可不可以使用final修饰符?
  • java/j2ee iis7站长之家
  • 关于Inner Class的简单问题?
  • anonymous inner class的问题
  • 关于inner class
  • 哪位能谈谈static方法内为什么不能包含static inner class?
  • 什么是inner class?类不过不加修饰符,它的访问权限是protected or default?
  • anonymouse inner class 到底有什么作用?
  • Think in Java 大讨论一 ( 关于 Inner class )
  • 大家能谈谈对内隐类(inner class)的理解吗?我对这个很糊涂!
  • 这个protected的inner class错在哪里?
  • 出200分(或更多),就non-static inner class请教java高手
  • 关于anonymous inner class的问题?请大家帮忙!!!
  • non-static inner class为什么不可以包含static methods and fields
  • How to create an object of a protected inner class of another package?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.sql.rowset接口joinrowset的类成员方法: inner_join定义及介绍
  • new Inner(){ }这个匿名类是不是就是指Inner类的一个匿名子类?
  • a problem about anonymous inner!!
  • sql中Left Join、Right Join、Inner Join的区别
  • 解析sql语句中left_join、inner_join中的on与where的区别
  • 最近频频发生 段错误,gdb最后显示Previous frame inner to this frame (corrupt stack?)的问题.
  • 超详细mysql left join,right join,inner join用法分析
  • MSSQL内外连接(INNER JOIN)语句详解
  • SQL 外链接操作小结 inner join left join right join
  • 数据库Left join , Right Join, Inner Join 的相关内容,非常实用


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3