有没有人知道java.lang.System.out笨拙设计背后的动机?
尴尬:
首先,外面的成员暴露(封装任何人?).
其次,它是最终的,但可以通过setOut()更改(与final相矛盾).
Nic*_*ley 19
在Java 1.0.x中System.out,朋友们没有final-it可以通过直接分配给他们来改变它们.但是,当Sun决定在Java 1.1(对于applet,当时)中可选地限制此行为时,这就出现了问题.为了保持至少一些向后兼容性,out最终并使用本机方法写入,该方法包含适当的安全检查.
我敢打赌,这主要是为了简洁.相比:
System.out.prinln("blah");
Run Code Online (Sandbox Code Playgroud)
同
System.getOut().println("blah");
Run Code Online (Sandbox Code Playgroud)
前者是没有多少字符短,但它仍然是短,更简单的概念.它也可能更快,尤其是在JIT在Java虚拟机中不常见的那一天; 我敢打赌,在这些情况下,直接访问比方法调用更快.所以,归结为权衡.
更新:
至于final和setOut(),后者的文档说如果有安全管理器,将查询是否允许调用者重新设置输出流.这可能就是答案; 如果该out成员可以直接转让,那么就没有办法保护它.
这只是我对API及其设计背后的想法的解释,我可能会离开.
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |