当前位置: 技术问答>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(王文友) 所说)。
朋友,你的明白?~
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的最大优点:)
呵呵,不开玩笑了,牺牲一点性能来换取代码的可维护性,我个人认为还是很值得的。
今天累了,在测试中的用途就不写了,抱歉。