cara mengubah variabel private
sebenarnya dalam konsep OOP ada yang namanya visibility atau penampakan, heheh kayak apa aja…
biasanya yang diketahui dalam OOP tuh ada 3 visibility, public, private dan protected, hanya dalam java ada satu lagi yaitu default, hanya yang default ini memang jarang sekali dipakai. nah sekarang pertanyaannya apakah kita bisa mengubah nilai sebuah variabel private? padahal dalam konsep OOP sendiri harusnya variabel private itu tidak bisa dirubah kecuali oleh class itu sendiri, artinya dari luar class tidah bisa mengubah, boro-boro mengubah mengakses pun tidak bisa, namun ini menjadi pengecualian dalam Java
sekarang kita coba buat sebuah class yang Name yang memiliki variabel private yaitu firstName dan lastName :
package echo.khannedy.privatevariable.domain;
public class Name {
private String firstName;
private String lastName;
@Override
public String toString() {
return firstName + " " + lastName;
}
}
setelah itu kita buat class service untuk memanipulasi variabel pada class Name sebelumnya :
package echo.khannedy.privatevariable.service;
import echo.khannedy.privatevariable.domain.Name;
import java.lang.reflect.Field;
public class NameService {
public void changeFirstName(Name name, String firstName) {
change(name, "firstName", firstName);
}
public void changeLastName(Name name, String lastName) {
change(name, "lastName", lastName);
}
private void change(Object object, String fieldName, Object value) {
try {
Field[] fields = Name.class.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equals(fieldName)) {
field.setAccessible(true);
field.set(object, value);
}
}
} catch (Exception e) {
}
}
}
sekarang kita buat class utama untuk menjalankannya :
package echo.khannedy.privatevariable;
import echo.khannedy.privatevariable.domain.Name;
import echo.khannedy.privatevariable.service.NameService;
public class Main {
public static void main(String[] args) {
NameService service = new NameService();
Name name = new Name();
System.out.println(name);
service.changeFirstName(name, "Eko Kurniawan");
service.changeLastName(name, "Khannedy");
System.out.println(name);
}
}
jika dijalankan, maka akan terlihat hasilnya seperti ini :
run: null null Eko Kurniawan Khannedy BUILD SUCCESSFUL (total time: 0 seconds)
bisa kita lihat sebelumnya nilai firstName dan lastName adalah null, dan setelah dimanipulasi menggunakan class NameService, mana firstName menjadi “Eko Kurnaiwan” dan lastName menjadi “Khannedy”, ini menandakan bahwa memang variabel private bisa dimanipulasi
download sourcecode lengkapnya disini :
makasih bro. kayaknya ol terus, nih?
Mas echo the real java programer
Mas Echo lebih hebat dari frans thamura,Thomas wirahadikusumah,samuel franklyn,Endy muhardin, sama ifnu
Mas echo pokoke top habis dehh……………………………………..
Harusnya orang orang yang disebutkan diatas itu meniru langkah Mas echo, jangan melulu cari fulus
wuisss
hati hati titipala
jangan sampe kedenger ama mereka
bisa gawat, hahahahah