CodeGym /Blog Jawa /Acak /Getters lan setter
John Squirrels
tingkat
San Francisco

Getters lan setter

Diterbitake ing grup
Hello! Ing lections sadurungé, sampeyan wis sinau carane kanggo wara-wara kelas lengkap karo cara lan lapangan. Ing wulangan dina iki, kita bakal ngomong babagan Getters and Setters in Java. Iki kemajuan serius, rampung! Nanging saiki aku kudu ngandhani bebener sing ora nyenengake. Kita ora nyatakake kelas kita kanthi bener! Kenging punapa? Sepisanan, kelas ing ngisor iki ora ana kesalahan:

public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }
}
Nanging ora. Bayangake sampeyan lagi lungguh ing kantor lan nulis kelas Kucing iki kanggo makili kucing. Banjur sampeyan mulih. Nalika sampeyan lunga, programer liyane teka ing kantor. Dheweke nggawe kelas Utama dhewe , ing ngendi dheweke wiwit nggunakake kelas Kucing sing sampeyan tulis.

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();
       cat.name = "";
       cat.age = -1000;
       cat.weight = 0;
   }
}
Ora ketompo kenapa dheweke nindakake lan kepiye kedadeyane (bisa uga wong lanang kesel utawa ora cukup turu). Ana liyane sing penting: kelas Cat saiki ngidini lapangan diwenehi nilai sing pancen edan. Akibaté, program kasebut nduweni obyek kanthi status sing ora bener (kayata kucing iki sing umure -1000 taun). Dadi kesalahan apa sing kita lakoni nalika ngumumake kelas kita? Kita mbukak data kelas kita. Jeneng, umur lan kothak bobot umum. Bisa diakses ing ngendi wae ing program: mung nggawe obyek Cat lan programer apa wae duwe akses langsung menyang data kasebut liwat operator titik ( . )

Cat cat = new Cat();
cat.name = "";
Ing kene kita langsung ngakses kolom jeneng lan nyetel regane. Kita kudu piye wae nglindhungi data saka gangguan eksternal sing ora bener. Apa sing kudu kita lakoni? Kaping pisanan, kabeh variabel conto (lapangan) kudu ditandhani karo modifier pribadi. Pribadi minangka modifier akses paling ketat ing Jawa. Sawise sampeyan nindakake iki, lapangan kelas Cat ora bisa diakses ing njaba kelas.

public class Cat {

   private String name;
   private int age;
   private int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }
}

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();
       cat.name = "";//error! The Cat class's name field is private!
   }
}
Compiler ndeleng iki lan langsung nggawe kesalahan. Saiki sawah wis dilindhungi. Nanging dadi metu sing kita wis mati akses mbok menawa banget tightly: sampeyan ora bisa njaluk bobot kucing ana ing program, malah yen sampeyan perlu. Iki uga dudu pilihan. Dadi, kelas kita pancen ora bisa digunakake. Saenipun, kita kudu ngidini sawetara jinis akses winates:
  • Programer liyane kudu bisa nggawe obyek Cat
  • Dheweke kudu bisa maca data saka obyek sing wis ana (contone, entuk jeneng utawa umur kucing sing wis ana)
  • Sampeyan uga kudu bisa nemtokake nilai lapangan. Nanging kanthi nindakake, mung nilai sing sah sing kudu diidini. Objek kita kudu direksa saka nilai sing ora bener (contone umur = -1000, lsp.).
Iku dhaftar prayoga saka syarat! Ing kasunyatan, kabeh iki gampang digayuh kanthi cara khusus sing diarani getter lan setter.
Getters lan setter - 2
Jeneng-jeneng kasebut asale saka "entuk" (yaiku "metode kanggo entuk nilai lapangan") lan "nyetel" (yaiku "cara nyetel nilai lapangan" ) .

public class Cat {

   private String name;
   private int age;
   private int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public int getWeight() {
       return weight;
   }

   public void setWeight(int weight) {
       this.weight = weight;
   }
}
Nalika sampeyan bisa ndeleng, padha katon cukup prasaja :) Jeneng asring kalebu "njaluk" / "set" plus jeneng lapangan cocog. Contone, metode getWeight () ngasilake nilai kolom bobot kanggo obyek sing diarani. Mangkene carane katon ing program:

public class Main {

   public static void main(String[] args) {

       Cat smudge = new Cat("Smudge", 5, 4);
       String smudgeName = smudge.getName();
       int smudgeAge = smudge.getAge();
       int smudgeWeight = smudge.getWeight();

       System.out.println("Cat's name: " + smudgeName);
       System.out.println("Cat's age: " + smudgeAge);
       System.out.println("Cat's weight: " + smudgeWeight);
   }
}
Output konsol:
Cat's name: Smudge
Cat's age: 5
Cat's weight: 4
Saiki kelas liyane ( Utama ) bisa ngakses lapangan Cat , nanging mung liwat getter. Elinga yen getter duwe modifier akses umum, yaiku kasedhiya saka ngendi wae ing program kasebut. Nanging babagan menehi nilai? Iki apa cara setter kanggo

public void setName(String name) {
   this.name = name;
}
Nalika sampeyan bisa ndeleng, padha uga prasaja. Kita nyebat metode setName () ing obyek Cat , pass string minangka argumen, lan string ditugasake menyang kolom jeneng obyek.

public class Main {

   public static void main(String[] args) {

       Cat smudge = new Cat("Smudge", 5, 4);

       System.out.println("Cat's original name: " + smudge.getName());
       smudge.setName("Mr. Smudge");
       System.out.println("Cat's new name: " + smudge.getName());
   }
}
Ing kene kita nggunakake getter lan setter. Pisanan, kita nggunakake getter kanggo njaluk lan nampilake jeneng asli kucing. Banjur, kita nggunakake setter kanggo nemtokake jeneng anyar ("Pak Smudge"). Banjur kita nggunakake getter maneh kanggo njaluk jeneng kasebut (kanggo mriksa yen pancen wis diganti). Output konsol:
Cat's original name: Smudge
Cat's new name: Mr. Smudge
Dadi apa bedane? Kita isih bisa nemtokake nilai sing ora bener kanggo kolom sanajan kita duwe setter:

public class Main {

   public static void main(String[] args) {

       Cat smudge = new Cat("Smudge", 5, 4);
       smudge.setAge(-1000);

       System.out.println("Smudge's age: " + smudge.getAge());
   }
}
Output konsol:
Smudge's age: -1000 years
Bentenipun punika setter punika cara lengkap. Lan ora kaya lapangan, cara ngidini sampeyan nulis logika verifikasi sing dibutuhake kanggo nyegah nilai sing ora bisa ditampa. Contone, sampeyan bisa kanthi gampang nyegah nomer negatif saka diutus minangka umur:

public void setAge(int age) {
   if (age >= 0) {
       this.age = age;
   } else {
       System.out.println("Error! Age can't be negative!");
   }
}
Lan saiki kode kita bisa digunakake kanthi bener!

public class Main {

   public static void main(String[] args) {

       Cat smudge = new Cat("Smudge", 5, 4);
       smudge.setAge(-1000);

       System.out.println("Smudge's age: " + smudge.getAge());
   }
}
Output konsol:
Error! Age can't be negative!
Smudge's age: 5 years
Ing setter, kita nggawe watesan sing nglindhungi kita saka upaya nyetel data sing ora bener. Umur Smudge ora diganti. Sampeyan kudu tansah nggawe getter lan setter. Sanajan ora ana watesan babagan nilai sing bisa ditindakake ing lapangan sampeyan, metode helper iki ora bakal mbebayani. Bayangna kahanan ing ngisor iki: sampeyan lan kanca-kanca nulis program bebarengan. Sampeyan nggawe kelas Cat karo lapangan umum. Kabeh programer nggunakake nanging pengin. Lan ing sawijining dina, sampeyan bakal ngerti: "Crap, cepet-cepet ana wong sing ora sengaja nemtokake nomer negatif kanggo bobot! Kita kudu nggawe setters lan nggawe kabeh lapangan pribadi!" Sampeyan mung nglakoni, lan langsung ngilangi kabeh kode sing ditulis dening kolega sampeyan. Sawise kabeh, padhaSawah kucing langsung.

cat.name = "Behemoth";
Lan saiki lapangan wis pribadi lan compiler spews Bunch saka kasalahan!

cat.name = "Behemoth";//error! The Cat class's name field is private!
Ing kasus iki, luwih apik kanggo ndhelikake lapangan lan nggawe getter lan setter wiwit wiwitan. Kabeh kolega sampeyan mesthi nggunakake. Lan yen sampeyan telat temen maujud sampeyan kudu piye wae matesi nilai lapangan, sampeyan bisa mung nulis mriksa nang setter. Lan kode ora ana sing bakal rusak. Mesthi, yen sampeyan pengin akses menyang lapangan mung "maca mung", sampeyan bisa nggawe mung getter kanggo. Mung cara sing kudu kasedhiya ing njaba (yaiku ing njaba kelas sampeyan). Data kudu didhelikake. Kita bisa nggawe perbandingan karo ponsel. Mbayangno yen tinimbang telpon seluler biasa sing ditutup, sampeyan diwenehi telpon kanthi kasus sing mbukak, kanthi macem-macem kabel, sirkuit, lan liya-liyane. bisa nelpon. Nanging sampeyan'
Getters lan setter - 3
Nanging, pabrikan menehi antarmuka: pangguna mung ngetik digit sing bener, menet tombol telpon ijo, lan telpon diwiwiti. Dheweke ora preduli apa sing kedadeyan ing njero sirkuit lan kabel, utawa kepiye carane bisa rampung. Ing conto iki, perusahaan mbatesi akses menyang "insides" telpon (data) lan mung mbukak antarmuka (metode). Akibaté, pangguna entuk apa sing dikarepake (kemampuan kanggo nelpon) lan mesthi ora bakal ngilangi apa-apa ing njero. Kanggo nguatake apa sing sampeyan sinau, disaranake sampeyan nonton video pelajaran saka Kursus Jawa
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION