“代码-3 ”中的实例内置类利用外层类 OuterClass3 中的模板参数 T ,作为 setData 参数的类型。
看似类内置类和实例内置类已经足够使用了。考虑这么一 个场景,一个方法利用了内置类来实现功能,这个方法中的变量需要被内置类来利用,通常可以把变量作为参数,传入内置类构造器或者其方法中,这也是通常的方 法。不过利用 布局 内置类(Local Class) 更为方便,因为局部内置类是在块中(方法也 是一种特殊的块)定义的,这样就很好的解决了上下文的参数传递问题。
参看代码:
package org.mercy.design;
/**
* OuterClass4 是外层类,Printer 局部内置类
*
* @author mercyblitz
*/
public class OuterClass4 {
public void print( byte [] bytes) {
final String message = new String(bytes);
/**
* 名为Printer LocalClass,不必把message作为参数传递。
*/
class Printer {
private void doPrint() {
System. out .println(message);
}
}
new Printer().doPrint();
}
public static void main(String[] args) {
new OuterClass4().print( "AAAAAAA" .getBytes());
}
}
代码 -4
在“代码-4”的示例中,有人可能会说,这看不出什么好处呀?!如果内 置类依赖的变量超过4个(Effective Java书中提到超过四个参数的话,不利于维护),那么局部内置类是不是方便维护呢?
顺便提到,匿名内置类是局部内置类的一种。
不难发现,局部内置类的缺点是代码混杂(方法和类混在一起),如果依赖 局部变量不多的情况下,在一定程度上面,增加了维护成本。
(其他内容,见附件)
- Java 面向对象设计最佳实践_-_内置类设计.zip (8.9 KB)
- 下载次数: 34
- InnerNestedLocalClassDesign.zip (8.5 KB)
- 下载次数: 19