11
일부 코드에서이 구문을 발견했습니다.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() {
....
}
}
}
답변 해 주셔서 감사합니다. 그러나'NameComparator'와'AgeComparator'를 비공개 클래스로 사용하는 것이 낫지 않습니까? 확실하지 않지만 정적 내부 클래스를 추가하지 않으면 바이너리가 호환되지 않습니까? – Chip
@Chip : 'Person'외부의 비공개 클래스 인 경우 실제로 필요하지 않을 때 같은 패키지에서 계속 사용할 수 있습니다. 정적 인 내부 클래스를 추가하면 명시 적으로 지정하지 않는 한 직렬화 UID가 변경 될 수 있지만 자바의 바이너리 직렬화는 너무 무서워서 어쨌든 사용하지 않습니다. 나는 단순히 코드를 실행하는 바이너리 호환성에 영향을 줄 것이라고는 생각하지 않는다. –
감사합니다. 바이너리 호환성을 해치지 않으면 의미가 있습니다. 디자인이 유연 해지기 위해서는 다른 클래스를 추가하고, 같은 방법으로'AImpl2'를 추가하고, 오래된 클라이언트를 깰 수 있기를 원합니다. – Chip