Kursinnehåll
Java Fördjupad
Java Fördjupad
Getter och Setter
Det bästa sättet att kringgå accessmodifieraren private
Alla Java-programmerare använder konstruktioner som kallas getters och setters.
Getters och setters är metoder som följer ett specifikt mönster. De används för att kringgå accessmodifieraren private
och effektivt manipulera fält från en annan klass.
Vad gör getters och setters?
Enkelt uttryckt tillåter settern oss att tilldela ett värde till ett specifikt fält som skyddas av accessmodifieraren private, medan gettern låter oss hämta värdet från ett fält som skyddas av accessmodifieraren private.
Syntaxen för en getter och en setter:
Main.java
// getter public fieldType getFieldName() { return field; } // setter public void setFieldName(fieldType field) { this.field = field; }
Som du kan se i koden ovan använder vi namngivningskonventionen för metoderna getFieldName()
och setFieldName()
. Därför, om vi har ett fält private String name
och vi skapar en getter och en setter med namnen getName()
respektive setName()
. Det är också värt att notera att gettern returnerar ett värde av samma typ som fältet name
, medan settern tar emot en parameter av samma typ som fältet name
.
Detta gör att vi kan komma åt fält som skyddas av accessmodifieraren private
.
Låt oss titta på ett exempel på hur man kommer åt ett privat fält från klassen Person
i klassen main
:
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 använder vi settern för att tilldela ett värde till fältet name
, och sedan använder vi gettern för att visa värdet av fältet name
på skärmen. Var uppmärksam på syntaxen för getter och setter, samt att fältet name
i klassen Person
är skyddat av åtkomstmodifieraren private
.
Konstruktor vs Getter/Setter
Vad är bäst att använda, initialisering via en konstruktor + överskuggning av metoden toString()
, eller att använda getters och setters?
Det är definitivt bättre att använda getters och setters för att komma åt fält som är skyddade av åtkomstmodifieraren private
. Detta ger större flexibilitet i koden och förbättrar dess läsbarhet. När du ser användningen av metoden getName()
i koden förstår du direkt att denna metod hämtar fältet med namnet name
. Samma sak gäller när du ser användningen av metoden setName()
, du förstår direkt att du tilldelar ett specifikt värde till fältet för objektet av klassen där den används. Om andra personer läser din kod kommer de att uppskatta att se getters och setters.
Det är också värt att notera att varje fält kräver sin egen getter och setter. Om en klass har två fält skyddade av åtkomstmodifieraren private
, bör klassen ha en getter för varje fält, det vill säga två getters och två setters.
Låt oss titta på ett exempel där vi lägger till ett age
-fält i 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 skapat en getter och en setter för varje fält i klassen Person
. I main
-metoden initierade vi fälten med hjälp av settern och visade deras värden på skärmen med hjälp av gettern. Att använda dessa metoder är mycket bekvämt, och du kommer att använda dem ofta i framtiden.
1. Vad är syftet med att använda getters och setters?
2. Vad är syntaxen för en getter-metod i Java?
3. Vad är syntaxen för en setter-metod i Java?
Tack för dina kommentarer!