Kursusindhold
Java Udvidet
Java Udvidet
Getter og Setter
Den bedste måde at omgå private adgangsmodifikator
Alle Java-programmører anvender konstruktioner kaldet gettere og settere.
Gettere og settere er metoder, der følger et specifikt mønster. De bruges til at omgå private
adgangsmodifikatoren og effektivt manipulere felter fra en anden klasse.
Hvad gør gettere og settere?
Kort sagt tillader setteren os at tildele en værdi til et specifikt felt, der er beskyttet af den private adgangsmodifikator, mens getter-metoden gør det muligt at hente værdien fra et felt, der er beskyttet af den private adgangsmodifikator.
Syntaksen for en getter og en setter:
Main.java
// getter public fieldType getFieldName() { return field; } // setter public void setFieldName(fieldType field) { this.field = field; }
Som det fremgår af koden ovenfor, anvender vi navngivningskonventionen for metoderne getFieldName()
og setFieldName()
. Derfor, hvis vi har et felt private String name
og vi opretter en getter og en setter med navnene getName()
og setName()
, henholdsvis. Det er også værd at bemærke, at getteren returnerer en værdi af samme type som name
-feltet, mens setteren modtager en parameter af samme type som name
-feltet.
Dette gør det muligt for os at tilgå felter, der er beskyttet af private
adgangsmodifikatoren.
Lad os se på et eksempel på adgang til et privat felt fra Person
-klassen i main
-klassen:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); System.out.println(bob.getName()); } } class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Som du kan se, bruger vi setter til at angive en værdi for feltet name
, og derefter bruger vi getter til at vise værdien af feltet name
på skærmen. Vær opmærksom på syntaksen for getter og setter, samt at feltet name
i klassen Person
er beskyttet af adgangsmodifikatoren private
.
Konstruktør vs Getter/Setter
Hvad er bedst at bruge, initialisering gennem en konstruktør + overskrivning af metoden toString()
, eller brug af gettere og settere?
Det er klart bedst at bruge gettere og settere til at tilgå felter, der er beskyttet af adgangsmodifikatoren private
. Dette giver større fleksibilitet i koden og forbedrer læsbarheden. Når du ser brugen af metoden getName()
i koden, forstår du straks, at denne metode henter feltet med navnet name
. Det samme gælder, når du ser brugen af metoden setName()
, forstår du straks, at du tildeler en specifik værdi til feltet for objektet af den klasse, hvor den bruges. Hvis andre læser din kode, vil de sætte pris på at se gettere og settere.
Det er også værd at bemærke, at hvert felt kræver sin egen getter og setter. Hvis en klasse har to felter beskyttet af adgangsmodifikatoren private
, skal klassen have én getter for hvert felt, altså to gettere og to settere.
Lad os se på et eksempel, hvor vi tilføjer et age
-felt til klassen Person
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); bob.setAge(27); System.out.println("Person's name: " + bob.getName() + ", Person's age: " + bob.getAge()); } } class Person { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Som du kan se, har vi oprettet én getter og én setter for hvert felt i Person
-klassen. I main
-metoden initialiserede vi felterne ved hjælp af setteren og viste deres værdier på skærmen ved hjælp af getteren. Det er meget praktisk at bruge disse metoder, og du vil ofte anvende dem fremover.
1. Hvad er formålet med at bruge getters og setters?
2. Hvad er syntaksen for en getter-metode i Java?
3. Hvad er syntaksen for en setter-metode i Java?
Tak for dine kommentarer!