代码之家  ›  专栏  ›  技术社区  ›  Shimi Bandiel

为什么System.out的设计很尴尬?

  •  13
  • Shimi Bandiel  · 技术社区  · 17 年前

    有人知道java.lang.System.out笨拙设计背后的动机吗?

    尴尬:
    成员暴露(封装任何人?)。
    最终的 但可以通过以下方式更改

    3 回复  |  直到 16 年前
        1
  •  19
  •   Nicholas Riley    17 年前

    System.out final 可以通过直接分配给它们来更改它们。然而,当Sun决定在Java 1.1中选择性地限制这种行为时(当时是针对小程序),这就出现了一个问题。为了保持至少一些向后兼容性, out 被设置为最终版本,并使用本机方法写入,该方法被适当的安全检查包裹。

        2
  •  9
  •   unwind    17 年前

    System.out.prinln("blah");
    

    System.getOut().println("blah");
    

    前者虽然短了不少字,但仍然 在概念上更简单、更短和更简单。它也很可能更快,尤其是在JIT在Java虚拟机中不太常见的时候;我敢打赌,在这些情况下,直接访问比方法调用更快。所以,这归结为一种权衡。

    更新:
    至于 final setOut() ,the documentation for the latter 表示如果有安全管理器,将查询是否允许调用者重新设置输出流。这可能是答案;如果 out

    这只是我对API的解释,以及它设计背后的想法,我可能会离开。

        3
  •  2
  •   masher    17 年前

    这与 Array.length List.size() .

    这可能是出于历史原因吗?还有其他类似的语言吗?