作者sbrhsieh (sbr)
看板java
标题Re: [分享] 原来 Void 可以这样用
时间Thu Mar 12 21:36:48 2009
※ 引述《macbuntu (邀怪)》之铭言:
: 以前一直觉得 Void (大的 Void 喔, 不是小的 void) 没什麽用,
: 除了 reflection 时会用到以外, 平常的程式根本不需要.
: 写 void func() 就很好了, 谁会想要写 Void func()?
: 但是今天突然发现我还真的会想要写 Void func():
: interface A {
: public Object visit(Node f);
: }
: class B implements A {
: @Override
: public Void visit(Node f) {
: ...
: return null; // 任何不是 null 的 return 值都是 compile time error
: }
: }
: 在我的状况, A 是一个由 code generator 产生的 visitor interface, 不能改,
: 我 implement 它时有些 method 不该 return 任何东西, 但因为 method 的内容很长
: 且 return 的点不只一个, 不小心会忘记, 而 interface 的关系我又不能用小 void,
: 这时候大 Void 就变得很有用了. 如果我弄错了 return 不是 null 的东西,
: 就会变成 compile time error. Nice!
: 其实不只 return type 可以用 Void, argument type 也可以:
: class C {
: // 只能用 func(null) 来呼叫
: public int func(Void o) {
: ...
: }
: }
其实你描述的这些现象跟 java.lang.Void 无关。
你只要定义一个只有 private constructor(无法 instantiate instance) 的 final
class 就会有你描述的特性。之所以只能 return null 是因为你无法 return 一个
instance(return type 无法被继承,无法建构出 object)。
java.lang.Void 当初的设计并不是特意让它有你形容的这个特性。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.130.21
1F:推 jtmh:对啊,就是这样。 03/12 21:39
2F:推 macbuntu:也是啦, 不过有个 Void 可以借用语意挺好的 03/12 22:15
3F:→ macbuntu:不然建个 class Null {private Null(){}} 就有点邪恶了 03/12 22:18
4F:→ sbrhsieh:我想程式怎麽写不重要,你觉得有面子就好... 03/12 22:20