我最近试图将字符串文字转换为 boolean
,当方法 boolean Boolean.getBoolean(String name)
弹出自动完成窗口。紧随其后还出现了另一种方法(boolean Boolean.parseBoolean(String s)
),这导致我搜索以找出这两者之间的区别,因为它们似乎都做同样的事情。
事实证明,Boolean.getBoolean(String name)
真正做的是检查是否存在给定名称的 System
属性 (!)如果它的值为 true
。我认为这是非常具有误导性的,因为我绝对不期望 Boolean
的方法实际上正在调用 System.getProperty
,并且仅仅通过查看方法签名,它确实看起来(至少在我看来)应该用于将 String
解析为 boolean
。当然,javadoc 清楚地说明了这一点,但我仍然认为该方法的名称具有误导性,而且它不在正确的位置。其他原始类型包装器,例如 Integer
也有类似的方法。
此外,属于基本 API 似乎不是一个非常有用的方法,因为我认为像 -Darg=true
这样的东西并不常见。也许这是一个 Java 职位面试的好问题:“Boolean.getBoolean("true")
的输出是什么?”。我相信这些方法更合适的地方是 System
类,例如,getPropertyAsBoolean
;但同样,我仍然认为没有必要在基础 API 中包含这些方法。将它们放在像 Properties
类这样的东西中是有意义的,在其中进行这种类型的转换非常常见。
你怎么看这一切?另外,如果你知道还有另一种“尴尬”的方法,请发布。
注意 我知道我可以使用 Boolean.valueOf
或 Boolean.parseBoolean
将字符串文字转换为 boolean
,但我只是想讨论一下 API 设计。
最佳答案
URL equals() 方法比较 IP 地址,使用网络连接,是阻塞操作!
来自 javadocs:
Two hosts are considered equivalent if both host names can be resolved into the same IP addresses; else if either host name can't be resolved, the host names must be equal without regard to case; or both host names equal to null.
Since hosts comparison requires name resolution, this operation is a blocking operation.
Note: The defined behavior for equals is known to be inconsistent with virtual hosting in HTTP.
改用 URI。
关于java - Java Base API 中最具误导性的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1291984/