2017-02-10 00:00:00 +0000   |     java effective java inner class   |   Viewed times   |    

静态成员类比非静态成员类好

因为省下了指向外围类实例的一个引用outer.this。静态成员类就可以当一个普通的类来对待,只是碰巧声明在另一个类的内部而已。

非静态成员类的优势是可以访问外围类实例

非静态成员类,就是平时说的 “内部类”。因为有一个指向外围类实例的一个引用outer.this,因此可以用来提供外围类不同类型的 “视图”。 典型的例子就是iterator()方法返回的Iterator其实就是在外围类内部对象上开了一个小视窗。 Map#entrySet()方法返回了外围类Map的一个Set视图。

匿名内部类有诸多限制,适合用来创建函数对象

匿名内部类没有名字,因此除了在声明它的地方之外,无法实例化。而且不能用instanceof判断。也不能实现多个接口,或者扩展一个类。所以它常见的用法是动态地创建像Comparator这样的函数对象。