ABY ROZWIĄZYWAĆ PROBLEM Z KLASĄ KOŃCOWĄ:
Istnieją dwa sposoby na zakończenie klasy. Pierwszym z nich jest użycie słowa kluczowego final w deklaracji klasy:
public final class SomeClass {
// . . . Class contents
}
Drugim sposobem na zakończenie klasy jest zadeklarowanie wszystkich jej konstruktorów jako prywatnych:
public class SomeClass {
public final static SOME_INSTANCE = new SomeClass(5);
private SomeClass(final int value) {
}
Oznaczenie go jako końcowego oszczędza kłopotów, jeśli dowiesz się, że jest to rzeczywiście finał, aby zademonstrować spojrzenie na tę klasę testu. na pierwszy rzut oka wygląda publicznie.
public class Test{
private Test(Class beanClass, Class stopClass, int flags)
throws Exception{
// . . . snip . . .
}
}
Niestety, ponieważ jedyny konstruktor klasy jest prywatny, nie można rozszerzyć tej klasy. W przypadku klasy Test nie ma powodu, aby klasa była ostateczna. Klasa Test jest dobrym przykładem tego, w jaki sposób niejawne klasy końcowe mogą powodować problemy.
Powinieneś więc oznaczyć go jako ostateczny, gdy domyślnie uczynisz klasę końcową, czyniąc ją konstruktorem prywatną.