Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇的鸡还是蛋_Java_Design Patterns - Fatal编程技术网

Java 爪哇的鸡还是蛋

Java 爪哇的鸡还是蛋,java,design-patterns,Java,Design Patterns,对象位于Java类的顶部。 String是Object的一个子类 那么,什么是第一个对象或字符串 提示答案是-Object 但有趣的是,对象已经有了一个toString()方法,因此“知道”了String。因此,在构造对象时,字符串必须已经存在。另一方面,String是Object的一个子类,当构造String时,Object必须已经存在。我们陷入了一个永无止境的定义周期(还有一些技术问题)。这种方法至少违反了单一根类的概念 这种担忧看起来可能是理论上的,而不是实际的 但问题是,我在其他框架中看

对象位于Java类的顶部。 String是Object的一个子类

那么,什么是第一个对象或字符串

提示答案是-Object

但有趣的是,对象已经有了一个toString()方法,因此“知道”了String。因此,在构造对象时,字符串必须已经存在。另一方面,String是Object的一个子类,当构造String时,Object必须已经存在。我们陷入了一个永无止境的定义周期(还有一些技术问题)。这种方法至少违反了单一根类的概念

这种担忧看起来可能是理论上的,而不是实际的

但问题是,我在其他框架中看到了类似的方法。 我认为,至少在某种程度上,它受到了核心Java类设计方式的启发

您认为,Java类之间的循环依赖通常是不可避免的(尤其是在对象/字符串的情况下)? 难道不应该不惜任何代价避免它们吗?
或者,他们有时(谨慎地)会被接受为合理妥协的结果吗?如果,那么-标准是什么?

由于对象和字符串都出现在Java的第一个版本中,我认为它们同时出现。

我认为类之间的循环依赖不一定是一个问题,并且经常发生(出于坚实的设计原因)。假设你有一棵树和一个相互了解的节点,或者一个链表和一个节点,等等。在这种情况下,循环依赖是完全合理的


我不太喜欢的是模块之间的循环依赖关系。在我看来,这些通常是可以避免的。

Java没有单通道编译器,而是多通道编译器

这意味着一起编译的所有类实际上都处于声明级别。即使它们具有循环依赖关系,它们也会在第一步中得到解决,
Object
类提供了一个
toString
方法这一事实在概念上并不意味着与拥有或更少根类相关的任何东西

因为我们讨论的是理论问题,所以类声明和哪个是真正的根类之间的关系很容易解决:

对象
是根类,因为
字符串
继承自它。


String-toString()
不过是一个对编译器授予类型安全性有用的签名,
Object
不需要
String
对象,它甚至不需要知道
String
是什么正如您所描述的,听起来好像您相信Java是一种脚本语言,其中一种必须先声明,另一种才能在其范围内,但事实并非如此,因为Java是一种编译语言,这意味着这种依赖关系在编译时得到解决。

没有矛盾

对象引用其自身的子类。这并不违法,因为与chicken不同,字符串不必从对象中“开发”,它们的类只需要对象类进行构造,因此两者都必须在编译时可用


如果你想搞不清楚,可以看看Smalltalk:它使用元类对象等,这是一个非常好的例子,说明几乎所有语言都可以自己实现。

我知道!这是一个笑话……:)@Orabîg没问题。笑话是受欢迎的。经过近15年的Java编程,我不相信Java是一种脚本语言,也不知道(至少在某种程度上)它是如何工作的。问题不在于如何,而在于为什么。如果不需要知道字符串是什么,那么它计划如何从toString()方法返回字符串类型的对象?至少应该有一个对象能够构造一个字符串实例并返回它。没有一些弦的知识怎么能做到呢?我只是想澄清一下。无论如何,先生,你的答案看起来是最好的,所以我会等一段时间,很可能会接受它(再加上投票选出其他好的答案)。