11

我在一些代码中发现了这个结构。

私有静态类实现 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()  {
           ....
        }    
    } 

}
4

1 回答 1

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,并且能够通过公共静态字段轻松获取实例非常好。

没有调用者需要知道实现 - 例如,可能只有一个比较器类接受参数 - 他们只是通过常量表达他们想要的比较器。(当然,您同样可以为此使用枚举。)

于 2012-08-10T05:52:01.913 回答