[英]Why doesn't the overridden equals(Object) method in the Boolean class require a boolean/Boolean as an argument
由於布爾equals(Object)方法不需要布爾/布爾參數,因此可能出現以下編碼錯誤:
private void foo() {
Boolean isSomeConditionTrue = false;
String doSomething = "YES";
if(isSomeConditionTrue.equals(doSomething)) {
// Do Something
}
}
該代碼不會“做某事”,因為編碼器忘記了在謂詞中將doSomething評估為String。 為什么布爾等於接受對象而不是布爾/布爾作為參數?
因為equals()
是在Object
類中定義的。
沒有可能的簽名可以滿足您的要求。
(不使Object
通用,這將違背目的)
該方法覆蓋
Object.equals(Object)
因此必須接受所有對象。
同樣,你可以寫
if (isSomeConditionTrue == doSomething)
即使這也不可能是真的。
解決此問題的一種方法是避免使用Wrappers(無論如何都不能為null)。 即,您的代碼僅在Boolean
值不為null時有效,因此不要使用包裝器,而應使用原語。
private void foo() {
boolean isSomeConditionTrue = false;
String doSomething = "YES";
if(isSomeConditionTrue == doSomething) { // doesn't compile
// Do Something
}
}
基元不僅更快,而且使值不能為null更加清晰,您可以使用==
!=
>
等常規Java操作。
equals()
是Object上的方法,並且方法協定要求參數為Object。 等於合同規定,如果對象類型錯誤,則應返回false。
因此,您必須先將doSomething
轉換為布爾值。 請注意,如果字符串單詞“ true”忽略大小寫,則即使Boolean.parseBoolean(String)
也將僅返回Boolean.TRUE。 “是”將不會解析為TRUE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.