在学习Thinking in Patterns with Java的Pattern refactoring中的//: refactor:trash:Trash.java的源代码时,发现静态内部类的使用,如下:
//: refactor:trash:Trash.java
// Base class for Trash recycling examples.
package refactor.trash;
import java.util.*;
import java.lang.reflect.*;
public abstract class Trash {
...//略去部分代码
public static class Messenger {
public String id;
public double data;
public Messenger(String name, double val) {
id = name;
data = val;
}
}
...//略去部分代码
public static Trash factory(Messenger info) {
...//略去部分代码
}
} ///:~
|
|
后面使用Messager类是这样的:
Trash.factory(new Trash.Messenger(type, weight))
|
|
经过查阅资料,得出下面的理解:
1、为什么用内部类?
答:因为Messenger的作用仅是为产生Trash而使用来封装信息的辅助类,其它地方也用不着,所以放在Trash类的内部;
2、为什么用静态的内部类?
答:因为使用静态的内部类可以在其包含它的外部类没有生成实际对象时生成这个内部类,而在这里,在Messenger对象生成之前根本就不能生成它的外部类Trash的对象;就算是其它某种情况可以先生成外部类,如果没有先生成外部类的必要性,我认为,应该尽量使用静态内部类,因为,何必要生成一个没有用的多余的外部类对象呢?(这个观点没有深入的的学习和验证,也许不正确!)
参考资料:
1、Thinking in Java, 3rd ed. Revision 4.0 Nested classes
./aaa-TIJ3-distribution/html/TIJ310.htm#Heading7630
when you say an inner class is static. A nested class means: Feedback
1. You don’t need an outer-class object in order to create an object of a nested class. Feedback
2. You can’t access a non-static outer-class object from an object of a nested class. Feedback
|
|
2、一篇完整叙述Java内部类的文章:
转:java内部类
good
Good understanding!