作者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
1F:推 cuteclare:orz 看的懂原po在问啥了 07/18 17:18
2F:推 a60301:推,忘了考虑到Java的Coding Style问题,果然每个程式码的 07/18 18:29
3F:→ a60301:属性(?)都不太一样,有的是御姐有的是萝莉甚至是正太(?) 07/18 18:30
4F:推 gmoz:像是编码会遇到幼女控 07/18 18:39
5F:推 LPH66:幼女控XDDDDDD 07/18 18:49
6F:→ cuteclare:java 好像不支援 overload operator orz 07/18 19:30
7F:→ cuteclare:不过 native 大神可以解决一切问题 ! 07/18 19:33
8F:推 tails32100:幼女控+1....不对啊!歪串了Orz 07/19 00:05
9F:→ abola921:老实说,回到最後,我不太知道原po想要什麽东西 07/19 16:10
10F:推 abola921:最後一个回文是我错!! 现在回头看我真的没发现他说的事 07/19 16:13
11F:→ abola921:太不专心看文就回,改进改进,歹势 07/19 16:21
12F:→ PsMonkey:没有这麽严重啦 XD 要说犯错我已经有罄竹难书的成就了 07/19 16:36