Java编程语言:私有实现类

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

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

}

解决方法

Is there any benefit to have a private static class implement 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外部可见,并且很容易通过公共静态字段轻松获取一个实例.

没有来电者需要知道实现 – 例如,可能只有一个比较器类可以使用参数,他们只是通过常量来表达他们想要的比较器. (当然可以同样使用这个枚举)

相关文章

应用场景 C端用户提交工单、工单创建完成之后、会发布一条工...
线程类,设置有一个公共资源 package cn.org.chris.concurre...
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量