一个的实现只是简单地委托(delegate)给另一个,这向我表明,从接口(interface)的角度来看,两者之间存在语义差异——或者至少,有人在某些时候是这样认为的。任何人都可以在那里发光吗?
编辑:我已经知道 toString
的实现代表toExternalForm
.这是我说的第一件事。 :) 我在问 为什么这种重复是存在的——这就是我所说的“语义”差异。
最佳答案
javadocs为这两个 toString()
和 toExternalForm()
,
Constructs a string representation of this URL. The string is created by calling the
toExternalForm
method of the stream protocol handler for this object.
换句话说,这两种方法被指定为返回相同的值。
为什么?
很难找到
URL
的真正原因。 API 就是这样设计的。这些决定是在大约 25 年前做出的。人们不会记得, session 记录(如果他们被拿走了)可能已经丢失或处理掉了。但是,我想推理会是这样的:
Object.toString()
方法有一个非常松散的规范。它基本上只是返回可能对调试有用的东西。URL
字符串化。目的。他们称之为URL.toExternalForm()
.URL.toExternalForm()
可能有人认为:"Oh ... now I have a good way to implement
URL.toString()
".
在 Java 1.0 和 Java 1.1 之间做出了指定这两种方法返回相同内容的决定。 (Google 获取 Java 1.0 和 1.1 文档并查看各自的 javadocs。)
这表明第 4 步是在原始实现“事后”完成的。 (我们需要查看原始源代码和提交历史来确认这一点,但它不可用。)
关于java - java.net.URL 上的 toExternalForm 和 toString 之间是否存在语义差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61346354/