Znalazłem tę konstrukcję w jakimś kodzie.Programowanie w języku Java: Prywatna klasa implementacji
Czy istnieje jakaś korzyść z posiadania prywatnego egzemplarza klasy statycznej A? Przypomniało mi to idiom Pimpl w C++. Czy jest jakaś korzyść z używania idiomu Pimpl w Javie?
public abstract class A {
public void doStuff();
public static A getNewInstance() {
return new AImpl();
}
private static class AImpl extends A {
public void doStuff() {
....
}
}
}
Dzięki za odpowiedź. Ale czy nie jest lepiej, aby 'NameComparator' i' AgeComparator' były klasami niepublicznymi? Nie jestem pewien, ale czy dodanie statycznej klasy wewnętrznej nie powoduje niezgodności binarnej? – Chip
@Chip: jeśli są to zajęcia niepubliczne poza "Person", nadal są dostępne w tym samym pakiecie, gdy naprawdę nie muszą być. Dodanie statycznej wewnętrznej klasy * może * zmienić numer seryjny UID, chyba że wyraźnie go określisz, ale serializacja binarna w Javie jest tak okropna, że i tak jej nie używam. Nie wierzę, że wpłynie to na kompatybilność binarną po prostu uruchomieniu kodu. –
Dzięki Jon. Ma sens, jeśli nie łamie kompatybilności binarnej. Aby projekt był elastyczny, chciałbym móc dodać kolejną klasę, na przykład "AImpl2" w ten sam sposób, a nie łamać starszych klientów. – Chip