我在一些代码中找到了这个构造。
私有静态类实现A有什么好处吗?这让我想起了C ++中的Pimpl成语。在Java中使用Pimpl习语是否有任何好处?
public abstract class A {
public void doStuff();
public static A getNewInstance() {
return new AImpl();
}
private static class AImpl extends A {
public void doStuff() {
....
}
}
}
答案 0 :(得分:17)
私有静态类实现A有什么好处吗?
嗯,它完全隐藏了实现,所以从封装的角度来看它非常好。我在几次见过的一种情况是自定义比较器。例如:
public class Person
{
public static final Comparator<Person> NAME_COMPARATOR = new NameComparator();
public static final Comparator<Person> AGE_COMPARATOR = new AgeComparator();
// Name, age etc properties
private static class NameComparator implements Comparator<Person>
{
...
}
private static class AgeComparator implements Comparator<Person>
{
...
}
}
比较器实现类不需要在Person
之外可见,并且能够通过公共静态字段轻松获取实例是很好的。
没有调用者需要知道实现 - 可能只有一个比较器类,它接受参数,例如 - 他们只是通过常量表达他们想要的比较器。 (当然,你可以同样使用枚举。)