Wenn es privat ist, und Sie wollen es nicht innerhalb der eigenen Klasse genannt, gibt es eine einfache Möglichkeit, so etwas zu verhindern: Schreiben Sie nicht den Code das nennt es mehr als einmal. Du bist der Autor der Klasse. Warum würdest du Code schreiben, um dich daran zu hindern, etwas zu tun, das du kontrollieren kannst?
Es kann nicht außerhalb der Klasse ohne Reflexion aufgerufen werden. Wenn Sie nicht möchten, dass es mehrmals in der Klasse aufgerufen wird, tun Sie es einfach nicht. Warum Code schreiben, um eine Aktion zu verhindern, die Sie nicht ausführen können?
Lassen Sie uns Bewertung:
Wir resrict die Erstellung von Objekt einer Klasse von seinem Konstruktor machen privat.
Constructor ist privat, so kann es nicht außerhalb der Klasse aufgerufen werden, wenn ein Client des Reflection-API verwendet Zugangsbeschränkungen zu untergraben.
Aber dieser Konstruktor noch von innerhalb der Klasse aufgerufen werden könnte. Gibt es auf jeden Fall zu verhindern dies in Java?
Das OP möchte verhindern, dass der eingeschränkte Konstruktor in der Klasse aufgerufen wird.
Wenn diese beiden Anweisungen korrekt sind, erläutern Sie bitte, warum Logik zum Verhindern von Aufrufen des Konstruktors erforderlich ist.
Hier ist eine typische Verwendung eines privaten Konstruktor:
public class Singleton
{
private static final Singleton instance = new Singleton();
public static void main(String[] args)
{
Singleton singleton = Singleton.getInstance();
System.out.println(singleton);
}
private Singleton() {};
public static Singleton getInstance() { return Singleton.instance; }
public String toString() { return Singleton.class.getName(); }
}
Ich kann nicht den Punkt der disallowing den Anruf an den privaten Konstruktor sehen.
Sie könnten Aspectj verwenden, um dies sicherzustellen. Es ist jedoch nur ratsam, dies zu tun, es sei denn, Sie möchten dies an mehr als einem Ort, da dies eine große Abhängigkeit und Komplexität mit sich bringen würde. In den meisten Fällen werden Ihnen Standards und Verfahren in diesem Fall besser als Werkzeuge und Kontrolle dienen. –
Wir werfen eine UnsupportedOperationException von unseren privaten Konstruktoren, die nicht instanziiert werden sollen. Eigentlich ist dieses Idiom so üblich für uns, dass unsere IDEs so konfiguriert sind, dass wir * pct * (vier Tastenkombinationen) eingeben und es einen privaten Konstruktor generiert, der eine UnsupportedOperationException auslöst. –
SyntaxT3rr0r