关于在外部对内部类进行实例化和引用

来源:互联网 发布:大帝和雪兔分手知乎 编辑:程序博客网 时间:2024/06/05 13:23

有些时候在写一些小的项目或者demo时,为了方便或者逻辑上归类往往定义一些内部类,比如一些小型的model,各种Adapter、BroadcastReceiver等等。


类似结构:

class A{    static class B{        public void put(){           System.out.println("abc);        }          }}


此时,对B进行实例化这样:

A.B b1  = new A.B();b1.put();

此时类B作为类A中的静态成员,可以以A.B的形式对B进行访问而不必实例化A。 这种形式的优点是访问方便,清晰明了,不必持有A的引用;缺点是不利于在A与B之间进行数据传递。

例如:

class A{    String str = "abc";    static class B{        public void put(){            System.out.println(str);        }          }}

此时将报错Cannot make a static reference to the non-static field str,即静态的成员不能持有非静态的成员的引用。 可以将str改为static,将B要访问的成员都改为static,但这会导致static的滥用违背面向对象的思想,还可能会造成内存泄漏。

另一种用法是将class B的static 修饰去掉

class A{    class B{public void put(){            System.out.println("abc");        }          }}


这样实例化
A a1 = new A();A.B b1 = a1.new B();b1.put();

先取得A的引用,在借由A的实例对B进行实例化,由于此时B作为A的成员,因此B中可自由访问A类的其他成员。这种情况下AB之间联系密切,实例化B必须取得A的引用。

 

当然,在项目规模较大而且考虑到后续的拓展,还是尽量采用合适的架构和写成独立的类。





0 0
原创粉丝点击