![translation](https://cdn.durumis.com/common/trans.png)
Ez egy AI által fordított bejegyzés.
[Hatékony Java] 4. elem: Ha meg szeretné akadályozni az instancíázást, használjon privát konstruktort
- Írás nyelve: Koreai
- •
-
Referencia ország: Minden ország
- •
- Informatika
Válasszon nyelvet
A durumis AI által összefoglalt szöveg
- Ha segédprogram-osztályt hoz létre, amely csak statikus metódusokat és mezőket tartalmaz, a konstruktort priváttá kell tenni, hogy megakadályozzák az instancíázást.
- Ez megakadályozza a konstruktort a külső hívását, és lehetővé teszi a fordító által automatikusan generált public alapértelmezett konstruktort explicit módon szabályozni.
- A privát konstruktorok lehetetlenné teszik az öröklődést, így korlátozhatók a segédprogram-osztályok szándékos használata és javítható a kód olvashatósága.
Vannak esetek, amikor hasznos lehet olyan osztályokat használni, amelyek csak statikus metódusokat és statikus mezőket tartalmaznak.
A leggyakoribb példák közé tartozik a java.lang.Math, a java.util.Arrays, amelyek matematikai műveletekkel és tömbökkel kapcsolatos metódusokat tartalmaznak. Vagy a java.util.Collections, amely statikus gyári metódusokat tartalmaz egy adott interfészt implementáló objektumok létrehozásához.
Ezeknek a segédprogram-osztályoknak nincsenek különálló példány-változóik vagy metódusaik, ezért nincs szükségük konstruktorra. Ha azonban nem adunk meg konstruktort, a fordító automatikusan létrehoz egy nyilvános alapértelmezett konstruktort. Emiatt a felhasználó nem tudja megkülönböztetni, hogy ez a konstruktor automatikusan lett-e létrehozva, vagy kézzel lett-e beírva.
Ezt megakadályozandó, néha absztrakt osztályként definiálják őket, de az absztrakt osztályok nem akadályozhatják meg az instancíázást. Ha leszármazott osztályokat hozunk létre, akkor is lehet őket példányosítani.
public abstract class Person {
public static void speak(String message) {
System.out.println(message);
}
}
public class Student extends Person {
public Student() {
super();
}
Ezért ahhoz, hogy megakadályozzuk a segédprogram-osztályok instancíázását, a konstruktor hozzáférési módosítóját privátnak kell beállítani.
public abstract class Person {
private Person() {
throw new AssertionError();
}
public static void speak(String message) {
System.out.println(message);
}
Ha a konstruktor hozzáférési módosítója privát, akkor az osztályon kívülről nem lehet hozzáférni. Ezenkívül megakadályozzuk, hogy a konstruktor belülről is meghívható legyen, egy kivétel dobásával.
Ezeknek a privát konstruktoroknak a használata megnehezítheti a konstruktor megértését, ezért érdemes kommentárt adni hozzájuk. Ha a konstruktort priváttá tesszük, az öröklődést is lehetetlenné tesszük.