Java ‘nyilvános’ Access Modifier

1. Áttekintés

Ebben a rövid cikkben a következőkkel foglalkozunk nyilvános módosító mélyrehatóan, és megvitatjuk, mikor és hogyan kell használni az osztályokkal és a tagokkal.

Ezenkívül bemutatjuk a nyilvános adatmezők használatának hátrányait.

A hozzáférés-módosítók általános áttekintése érdekében feltétlenül olvassa el a Java hozzáférés-módosítókról szóló cikkünket.

2. Mikor kell használni a Nyilvános hozzáférés módosítót

A nyilvános osztályok és interfészek a nyilvános tagokkal együtt meghatároznak egy API-t. Ez a kódunk azon része, amelyet mások láthatnak és felhasználhatnak az objektumaink viselkedésének szabályozására.

A nyilvános módosító túlzott használata azonban sérti az objektumorientált programozás (OOP) beágyazási elvét, és ennek néhány hátránya van:

  • Növeli az API méretét, így az ügyfelek nehezebben tudják használni
  • Egyre nehezebb megváltoztatni a kódunkat, mert az ügyfelek támaszkodnak rá - a jövőbeni bármilyen változás megtörheti a kódot

3. Nyilvános interfészek és osztályok

3.1. Nyilvános interfészek

A nyilvános felület meghatároz egy specifikációt, amelynek egy vagy több megvalósítása lehet. Ezeket a megvalósításokat akár mi is biztosíthatjuk, akár mások is megírhatják.

Például a Java API kiteszi a Kapcsolat felület az adatbázis-kapcsolati műveletek meghatározásához, a tényleges megvalósítást az egyes gyártókra bízva. Futás közben megkapjuk a kívánt kapcsolatot a projekt beállítása alapján:

Csatlakozási kapcsolat = DriverManager.getConnection (url);

A getConnection A method egy technológia-specifikus megvalósítás egy példányát adja vissza.

3.2. Nyilvános órák

Meghatározzuk a nyilvános osztályokat, hogy az ügyfelek példányosítással és statikus hivatkozással használhassák tagjaikat:

assertEquals (0, új BigDecimal (0) .intValue ()); // példánytag assertEquals (2147483647, Egész szám.MAX_VALUE); // statikus tag 

Ezenkívül megtervezhetjük az öröklési nyilvános osztályokat az opcionális használatával absztrakt módosító. Amikor a absztrakt módosító, az osztály olyan, mint egy csontváz, amelynek olyan mezői és előre megvalósított módszerei vannak, amelyeket bármely konkrét megvalósítás használhat, amellett, hogy absztrakt módszerekkel rendelkeznek, amelyeket az egyes alosztályoknak végre kell hajtaniuk.

Például a Java gyűjtemények keretrendszere biztosítja a AbstractList osztály testreszabott listák létrehozásának alapjaként:

public class ListOfThree kiterjeszti az AbstractList {@Orride public E get (int index) {// egyéni megvalósítás} @Orride public int size () {// egyéni implementáció}}

Tehát csak a kap() és méret() mód. Más módszerek, mint pl indexe() és tartalmazzaAll () már megvalósítottak számunkra.

3.3. Beágyazott nyilvános órák és interfészek

A nyilvános legfelső szintű osztályokhoz és interfészekhez hasonlóan a beágyazott nyilvános osztályok és interfészek is meghatározzák az API adattípust. Különösen két szempontból hasznosak:

  • Jelzik az API végfelhasználó számára, hogy a mellékelő legfelső szintű típus és a hozzá tartozó típusok logikai kapcsolatban vannak, és együtt használják őket
  • Kompaktabbá teszik kódbázisunkat azáltal, hogy csökkentik azoknak a forráskódfájloknak a számát, amelyeket akkor használtunk volna, ha legfelső szintű osztályoknak és interfészeknek nyilvánítottuk

Példa erre a Térkép.Belépés interfész a Java Java API-ból:

a (Map.Entry bejegyzéshez: mapObject.entrySet ()) {}

Készítés Térkép.Bejegyzés a a beágyazott felület szorosan kapcsolódik a java.util.Térkép felületen, és megmentett minket egy másik fájl létrehozásától a java.util csomag.

Kérjük, olvassa el a beágyazott osztályok cikkét további részletekért.

4. Nyilvános módszerek

A nyilvános módszerek lehetővé teszik a felhasználók számára a kész műveletek végrehajtását. Ilyen például a nyilvánosság toLowerCase módszer a Húr API:

assertEquals ("alex", "ALEX" .toLowerCase ());

Biztonságosan statikusvá tehetjük a nyilvános metódust, ha nem használ példánymezőket. A parseInt módszer a Egész szám osztály egy nyilvános statikus módszer példája:

assertEquals (1, Integer.parseInt ("1"));

A kivitelezők általában nyilvánosak, hogy az objektumokat példányosíthassuk és inicializálhassuk, bár néha lehetnek privátok, mint a szinguletteknél.

5. Nyilvános mezők

A nyilvános mezők lehetővé teszik az objektum állapotának közvetlen megváltoztatását. Alapszabály, hogy nem szabad nyilvános mezőket használni. Ennek több oka is van, amint látni készülünk.

5.1. Menetbiztonság

A nyilvános láthatóság nem végleges mezőkkel vagy végső módosítható mezőkkel történő használata nem biztonságos. Nem tudjuk ellenőrizni a referenciák vagy állapotok különböző szálakban történő megváltoztatását.

Kérjük, olvassa el a szálbiztonságról szóló cikkünket, ha többet szeretne megtudni a szálbiztonsági kód írásáról.

5.2. A módosítások végrehajtása

Nincs kontrollunk a nem végleges nyilvános mező felett, mert annak referenciája vagy állapota közvetlenül beállítható.

Ehelyett jobb elrejteni a mezőket egy privát módosító segítségével, és egy nyilvános szetteret használni:

nyilvános osztály Diák {private int age; public void setAge (int kor) {if (150 éves kor) {dobjon új IllegalArgumentException (); } ez.kor = életkor; }}

5.3. Az adattípus módosítása

A nyilvános mezők, változtathatóak vagy megváltoztathatatlanok, az ügyfél szerződésének részét képezik. Ezeknek a mezőknek az adatábrázolását egy későbbi kiadásban nehezebb megváltoztatni, mert az ügyfeleknek szükségük lehet a megvalósítások átalakítására.

A mezők privát hatókörének megadásával és hozzáférők használatával rugalmasan változtathatjuk a belső ábrázolást a régi adattípus megtartása mellett is:

 nyilvános osztály Tanuló {magán StudentGrade évfolyam; // új adatreprezentáció public void setGrade (int évfolyam) {this.grade = new StudentGrade (évfolyam); } public int getGrade () {return this.grade.getGrade (). intValue (); }}

Az egyetlen kivétel a nyilvános mezők használata előtt a statikus végső változhatatlan mezők használata az állandók ábrázolásához:

public static final String SLASH = "/";

6. Következtetés

Ebben az oktatóanyagban azt láttuk, hogy a nyilvános módosítót használják az API meghatározására.

Ismertettük, hogy a módosító túlzott használata hogyan korlátozhatja a megvalósításunk fejlesztésének lehetőségét.

Végül megbeszéltük, hogy miért rossz a nyilvános módosítók használata a mezőkön.

És mint mindig, ennek a cikknek a kódmintái elérhetők a GitHubon.