System.out.println
是否违反了德米特定律?
如果没有,为什么?
答案 0 :(得分:2)
视视图而定。
LoD:是的,因为它使用控制台。在LoD下,您无法接受访问。
LoD-F:是的,因为它使用了多个点。 LoD-F指出,在任何方法使用中,只有对象可以知道自身的内部结构。 IE
System.out.println()
需要了解系统结构(它具有.out)才能达到println(),
对于系统不破坏LoD-F,它必须是
System.println()
要通过示例打破正式规则,println()(方法)只能访问:
(我知道,这是一个反向引用,因为代码应该是调用它的方法,但它实际上是双向的。)
答案 1 :(得分:1)
System.out
实际上是一个“全球状态”,是的,从技术上来说它违反了“德米特定律”。但是:
System.out.println(..)
。请使用记录器(log4j,logback,slf4j)。答案 2 :(得分:0)
我说的不是真的,因为它调用Object.toString()
并且不会以任何方式与任何类别紧密结合;它只是告诉对象将自身转换为字符串。
编辑:
如果您的意思是呼叫本身,而不是呼叫中发生的事情,那么我会说是的,因为它将您的程序紧密地耦合到System.out
字段。
答案 3 :(得分:0)
它违反了法律,因为它使用“多个点”,并暴露了它正在使用另一个对象进行println调用的事实。
答案 4 :(得分:0)
没有
System.out
是一个全局变量。
更正式地说,Demeter法则的功能需要一种方法 对象O的m只能调用以下类型的方法 对象:[2]
- O本身
- m参数
- 在m
中创建/实例化的任何对象- O的直接组件对象
- 可由O访问的全局变量,范围为m < - This one
醇>
根据第5条规则,您可以在任何上下文中调用全局变量System.out
的任何方法。