我总结出四大好处: 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(王文友) 所说)。朋友,你的明白?~
啊? 你这样使用内在类? 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.
能否给出相应的例子
so thanks!
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的最大优点:)
呵呵,不开玩笑了,牺牲一点性能来换取代码的可维护性,我个人认为还是很值得的。
今天累了,在测试中的用途就不写了,抱歉。