作者PsMonkey (痞子軍團團長)
看板java
標題Re: [問題] 封裝Getter/Setter
時間Thu Jul 18 14:32:21 2013
我直接只留最後推文的部份
※ 引述《a60301 (mingtsay〃小喵)》之銘言:
: 我看很多 Java 程式碼都是寫成:
: public class Foo {
: private int _bar;
:
: public int getBar() {
: return _bar;
: }
:
: public void setBar(int bar) {
: if (bar >= 0) _bar = bar;
: }
:
: public Foo(int bar) {
: _bar = bar;
: }
: public Foo() {
: this(0);
: }
: }
:
: 所以使用起來會是像這樣的用法:
:
: Foo foo = new Foo();
: foo.setBar(3);
: System.out.println(foo.getBar()); // 3
: foo.setBar(-8); // invalid bar
: System.out.println(foo.getBar()); // 3
:
: 我只是期待可以這樣做同時達成Getter/Setter概念:
:
: foo.bar = 3; // _bar = 3
: foo.bar = -8; // _bar won't change
:
: 不過看起來只有VB, JS, PHP才有這種特殊用法,
: 至於C/C++, Java我還是乖乖開getFoo/setFoo的function好了…
: → abola921:那不是把bar宣告成public 就好不是嗎... 07/18 13:55
我覺得這個問題可以從樓上的推文作結,也可以從樓上的推文作起始 XD
先說 abola921 推文的問題
基本上那個 VB 的語法還是會實際去跑 setter
所以在上頭的例子當中,原 po 期望在
foo.bar = -8;
之後,foo.bar 的值還是 3。
所以,不是把 Foo 的 bar 宣告成 public 就可以解決的事情
畢竟 Java 的 assign 就是 assign。
我想,一切的癥結點也是在這句上
Java 的 assign 就是 assign
我先說我不知道 VB / PHP 會怎麼處理這件事情
JavaScript... 其實我不知道 JavaScript 有這功能 [死]
(我也算是寫了快一年的 JS 阿 [被毆飛])
請試想下面這個 case
public class Foo {
public int open;
private int close;
//假設 open 沒有 getter/setter
//省略 close 的 getter/setter
}
那麼,按照原 po 的想法
當我看到這樣的 code 的時候,我要從何 trace 起?
Foo foo = new Foo();
foo.open = 1;
foo.close = 1;
更不用說,如果 open 其實也有 getter/setter 的話......
所以,我其實看不出來原 po 希望的那個語法...
也許這個 syntax sugar 有人喜歡這味
但是跟 Java 一貫講究囉唆以求(盡量)不會有模糊不清的部份
我覺得是相違背的
最後,我知道的 EL 是會去呼叫 setter
算是最接近原 po 要得東西
只是 EL 理論上也不是直接用在 Java code 當中
當然,強調一下
這只是我個人的想法,也許根本就是我搞錯什麼了 Orz
--
錢鍾書:
說出來的話
http://www.psmonkey.org
比不上不說出來的話
Java 版 cookcomic 版
只影射著說不出來的話
and more......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.5.37
推 cuteclare:orz 看的懂原po在問啥了 07/18 17:18
推 a60301:推,忘了考慮到Java的Coding Style問題,果然每個程式碼的 07/18 18:29
→ a60301:屬性(?)都不太一樣,有的是御姐有的是蘿莉甚至是正太(?) 07/18 18:30
推 gmoz:像是編碼會遇到幼女控 07/18 18:39
推 LPH66:幼女控XDDDDDD 07/18 18:49
→ cuteclare:java 好像不支援 overload operator orz 07/18 19:30
→ cuteclare:不過 native 大神可以解決一切問題 ! 07/18 19:33
推 tails32100:幼女控+1....不對啊!歪串了Orz 07/19 00:05
→ abola921:老實說,回到最後,我不太知道原po想要什麼東西 07/19 16:10
推 abola921:最後一個回文是我錯!! 現在回頭看我真的沒發現他說的事 07/19 16:13
→ abola921:太不專心看文就回,改進改進,歹勢 07/19 16:21
→ PsMonkey:沒有這麼嚴重啦 XD 要說犯錯我已經有罄竹難書的成就了 07/19 16:36