作者weii (迷惑失道)
看板SFFamily
标题[转录][分享] 原来 Void 可以这样用
时间Thu Mar 12 23:55:00 2009
※ [本文转录自 java 看板]
作者: macbuntu (邀怪) 看板: java
标题: [分享] 原来 Void 可以这样用
时间: Thu Mar 12 18:37:22 2009
以前一直觉得
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) {
...
}
}
但因为 Void 比任何其他型别都还来的 "specific", 所以除非你的 interface 就是
宣告 Void 当作 argument, 否则底下的子孙是不能用 Void 来 implement 的.
这我就真的想不到有甚麽状况会需要宣告一个 Void 型别的 argument 了 :P
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.137.5.239
1F:推 silver8250:长知识+1 03/12 20:39
--
你凭什麽爱我...?
又凭什麽要走...!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.114.199.204