![translation](https://cdn.durumis.com/common/trans.png)
Dit is een door AI vertaalde post.
[Effectieve Java] Item 4. Gebruik een private constructor om instantiatie te voorkomen
- Taal van de tekst: Koreaans
- •
-
Referentieland: Alle landen
- •
- Informatietechnologie
Selecteer taal
Samengevat door durumis AI
- Wanneer u een utility-klasse creëert die alleen statische methoden en velden bevat, moet u de constructor 'private' maken om instantiatie te voorkomen.
- Hierdoor kunt u voorkomen dat de constructor vanaf buiten de klasse wordt aangeroepen en kunt u de door de compiler automatisch gegenereerde public default constructor expliciet regelen.
- Een private constructor maakt de klasse niet erfelijk, waardoor het doelgerichte gebruik van de utility-klasse wordt beperkt en de leesbaarheid van de code wordt verbeterd.
Soms is het handig om een klasse te gebruiken die alleen statische methoden en statische velden bevat.
Een typisch voorbeeld hiervan zijn utility klassen zoals java.lang.Math, java.util.Arrays, die methoden bevatten voor wiskundige bewerkingen en arrays. Of java.util.Collections, die statische factory methoden bevat om objecten te creëren die een specifieke interface implementeren.
Deze utility klassen hebben geen instantie-variabelen of methoden nodig om gebruikt te worden, dus ze hebben geen constructor nodig. Als je geen constructor definieert, genereert de compiler automatisch een public standaard constructor. Daardoor is het voor de gebruiker moeilijk om te zien of de constructor automatisch is gegenereerd.
Om dit te voorkomen, wordt soms een abstracte klasse gebruikt. Een abstracte klasse kan niet worden geïnstantieerd. Maar je kan wel een subklasse maken en die instantiëren.
public abstract class Person {
public static void speak(String message) {
System.out.println(message);
}
}
public class Student extends Person {
public Student() {
super();
}
Om instantiatie van utility klassen te voorkomen, moet de toegang tot de constructor private worden gemaakt.
public abstract class Person {
private Person() {
throw new AssertionError();
}
public static void speak(String message) {
System.out.println(message);
}
Als de toegang tot de standaard constructor private is, kan deze niet worden benaderd vanuit de klasse. Bovendien is een uitzondering gedefinieerd om te voorkomen dat de standaard constructor intern wordt aangeroepen.
Deze private constructor kan moeilijk te begrijpen zijn voor de gebruiker. Het is dus een goed idee om een commentaar toe te voegen. Als de constructor private is, is er geen inherentie mogelijk.
Bron
- Effectieve Java
- https://catsbi.oopy.io/d7f3a636-b613-453b-91c7-655d71fda2b1