Re: [問題] 封裝Getter/Setter
我直接只留最後推文的部份
※ 引述《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
推
07/18 17:18, , 1F
07/18 17:18, 1F
推
07/18 18:29, , 2F
07/18 18:29, 2F
→
07/18 18:30, , 3F
07/18 18:30, 3F
推
07/18 18:39, , 4F
07/18 18:39, 4F
推
07/18 18:49, , 5F
07/18 18:49, 5F
→
07/18 19:30, , 6F
07/18 19:30, 6F
→
07/18 19:33, , 7F
07/18 19:33, 7F
推
07/19 00:05, , 8F
07/19 00:05, 8F
→
07/19 16:10, , 9F
07/19 16:10, 9F
推
07/19 16:13, , 10F
07/19 16:13, 10F
→
07/19 16:21, , 11F
07/19 16:21, 11F
→
07/19 16:36, , 12F
07/19 16:36, 12F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):