今天想來聊一下關於用Java的List陣列完成Getter-Setter這件事(`・ω・´)+
如果你上網google:
java setter getter
java setter getter example
java setter getter List
等等以下關鍵字的話
我常常覺得跑出來的東西有時候真的很不盡人意
大多不是教得太難,不然就是理論講太多或是根本就是在探討該不該使用getter-setter (´・_・`)
對我這種菜逼八而言其實我想知道的並不是這些
而是到底如何使用啊啊啊啊啊啊(╯=▃=)╯︵┻━┻
而且老實說...就算結論是沒必要使用但是也不代表你不用學呀...((個人思想
如果各位有機會看一些大神的Source code的話
有時可以發現這些大神多數會使用之
尤其是在資料庫操作上更為明顯
有鑑於此這就是今天想特別發這篇文章的起因(・∀・)
今天的東西不會太多,目標就是手把手教你會使用Getter-Setter的陣列應用
加油吧~
.
.
阿對了Github在這
https://github.com/thumbb13555/GetterSetterExample
1.環境
因為這次的重點是著重在"如何使用Getter-Setter",因此這次我是用IntelliJ撰寫
省去了介面那部份的問題~
那這次的java類別有兩個
一個當然是主類別不用講,以及要在創建一個Getter-Setter儲存的類別
我將它命名為GetterSetterExample
2.設置Getter-Setter環境
2-1 設置全域變數
首先來架設Getter-Setter環境
點開GetterSetterExample.java後
先在裡面定義所需要的全域變數
我們這次範例要用的四個變數為
Name->String
age->int
score->float
isStudent->boolean
故,先在內容的全域變數輸入他們
public class GetterSetterExample {
private String name;
private int age;
private float score;
private boolean isStudent;
}
2-2 設置Getter-Setter
再來就是加入getter-setter
其實真的要解釋的話就是設置取得值的部分(getter)以及設置給予值的部分(setter)
在Java的編譯器中,它已經很貼心地幫你做好自動設定了
只要在一個空白處按下⌘+N(Mac版)alt+insert(Window)就會出現這個視窗
選擇Getter and Setter
加入全部
接著編輯器就會自動幫你完成囉!(・ω・)b
public class GetterSetterExample {
private String name;
private int age;
private float score;
private boolean isStudent;
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 float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public boolean isStudent() {
return isStudent;
}
public void setStudent(boolean student) {
isStudent = student;
}
}
這是目前的樣子
2-3 加入建構子
設置Getter-Setter的最後一步就是加入建構子
這一部非常重要⚠️
如果沒有建構子做為宣告,那陣列根本就不會成立(´υ`)
一樣按下⌘+N(Mac版)alt+insert(Window)
選擇Constructor
四個都要
這樣就完成一個輸入四個變數的建構子
而我通常都會加入一個空的建構子跟一個有東西的建構子
所以再加入一個空的建構子
一樣按下⌘+N(Mac版)alt+insert(Window)
點選Constructor
這次選底下的Select None
就建立了一個空建構子了!
到這邊整個Getter-Setter就完成囉(•ө•)♡
GetterSetterExample.java長這樣
public class GetterSetterExample {
private String name;
private int age;
private float score;
private boolean isStudent;
public GetterSetterExample() {}
public GetterSetterExample(String name, int age, float score, boolean student) {
this.name = name;
this.age = age;
this.score = score;
this.isStudent = student;
}
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 float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
public boolean isStudent() {
return isStudent;
}
public void setStudent(boolean student) {
isStudent = student;
}
}
3.操作
回到Main.java
最後就是要來利用這個Getter-Setter操作陣列
首先宣告一個List陣列並包裹剛剛的類別
public static void main(String[] args) {
List<GetterSetterExample> mList = new ArrayList<>();
}
3-1 新增一筆資料
新增資料有兩個做法
我自己是比較推崇第一個做法啦 (´・з・)
雖然要co的東西可能會比較多一點
但是程式的可讀性比較高
(此外順便新增輸出部分)
public static void main(String[] args) {
List<GetterSetterExample> mList = new ArrayList<>();
mList.add(new GetterSetterExample());
mList.get(0).setName("Jack");
mList.get(0).setAge(18);
mList.get(0).setScore(75.3f);
mList.get(0).setStudent(true);
for (int i=0;i<mList.size();i++){
System.out.println("========================");
System.out.println("姓名:"+mList.get(i).getName());
System.out.println("年齡:"+mList.get(i).getAge());
System.out.println("點數:"+mList.get(i).getScore());
System.out.println("是否為學生:"+mList.get(i).isStudent());
}
System.out.println("========================");
}
這時候可以試著輸出看看,應該就會看到資料了
接著是第二種做法~
還記得我們在新增建構子時有新增兩種嗎?
沒錯這邊使用的就是另一個建構子作為接口
作法如下
public static void main(String[] args) {
List<GetterSetterExample> mList = new ArrayList<>();
mList.add(new GetterSetterExample());
mList.get(0).setName("Jack");
mList.get(0).setAge(18);
mList.get(0).setScore(75.3f);
mList.get(0).setStudent(true);
mList.add(new GetterSetterExample("Sam",20,96,false));
mList.add(new GetterSetterExample("Eddies",15,62,true));
mList.get(2).setAge(16);
for (int i=0;i<mList.size();i++){
System.out.println("========================");
System.out.println("姓名:"+mList.get(i).getName());
System.out.println("年齡:"+mList.get(i).getAge());
System.out.println("點數:"+mList.get(i).getScore());
System.out.println("是否為學生:"+mList.get(i).isStudent());
}
System.out.println("========================");
}
這時候來看輸出,就可以看到這樣的輸出囉
========================
姓名:Jack
年齡:18
點數:75.3
是否為學生:true
========================
姓名:Sam
年齡:20
點數:96.0
是否為學生:false
========================
姓名:Eddies
年齡:16
點數:62.0
是否為學生:true
========================
3-2 修改一筆資料
這時候我們的資料有三筆麻(・ωー)~☆
那要如何修改資料?其實跟陣列是一樣的
具體如下:如果我要改變第二筆資料(Sam)的年齡,修正為19
那就在他下面加入這行
mList.get(1).setAge(19);
來看輸出
========================
姓名:Jack
年齡:18
點數:75.3
是否為學生:true
========================
姓名:Sam
年齡:19
點數:96.0
是否為學生:false
========================
姓名:Eddies
年齡:16
點數:62.0
是否為學生:true
========================
事就這樣成了,甚好(´・з・)
結語
"只要這東西被創造出來,必然有它存在意義"
這個觀念一直是我的中心理念
網路上對於要不要用Getter-Setter很多人做了不少分析
但是我覺得最重要的部分是
他的可讀性很高!
他的可讀性很高!
他的可讀性很高!
與Getter-Setter所替代的,在我實際應用中,最接近的莫過於
Array<HashMap<String,String>>用法了
簡單來說就是一種再ArrayList內包入HashMap的方法
但是若不考慮製作JSON陣列輸出的話
實際上用getter-Setter的確可讓程式更好維護(´υ`)
而且若剛好DataBase欄位是一個不可視狀態時
如果架構了Getter-Setter也會幫助DB的欄位維護
(但前提是接手你的人必須也要懂....)
關於DB欄位可視化及DB開發的相關文章在這,大家可以去看看
http://thumbb13555.pixnet.net/blog/post/317439792-android_studio_sqlite_stetho
那今天文章到這,希望對大家有幫助
喜歡我的文章可以將我的文章納入書籤喔~
留言列表