มีวิธีการคงที่มาตรฐาน Java "null หรือเท่ากับ" หรือไม่?


101

หากต้องการบันทึกการพิมพ์และชี้แจงรหัสของฉันมีวิธีการต่อไปนี้เวอร์ชันมาตรฐานหรือไม่

public static boolean bothNullOrEqual(Object x, Object y) {
  return ( x == null ? y == null : x.equals(y) );
}

มีใครบอกได้ไหมว่าสิ่งนั้นมีประโยชน์ตรงไหน?
anjanb

2
มันช่วยให้คุณสามารถข้ามการตรวจสอบว่างในวิธีการเท่ากับ () ของคุณ
Michael Myers

1
หากคุณกำลังใช้งานคอลเล็กชันเมธอด. contains () ของคุณเมื่อกำหนด "o" จำเป็นต้องทดสอบ "ว่าคอลเล็กชันนี้มีองค์ประกอบอย่างน้อยหนึ่งองค์ประกอบหรือไม่ (o == null? e == null: o.equals (e )).” ในทำนองเดียวกันเมธอด. remove () ของคุณจะต้องลบองค์ประกอบดังกล่าวออกไป
newacct

6
แค่สองเซ็นต์ของฉัน ฉันจะใช้: บูลีนคงที่สาธารณะทั้ง NullOrEqual (Object x, Object y) (return (x == y || (x! = null && x.equals (y))); } IMHO สามารถอ่านได้มากขึ้นสำหรับโปรแกรมเมอร์มือใหม่
m_vitaly

1
กรณีการใช้งานอื่น: เปรียบเทียบค่าเพื่อดูว่ามีการเปลี่ยนแปลงจากค่าก่อนหน้าหรือไม่ในระหว่างการตรวจสอบสกปรก
Neromancer

คำตอบ:


193

ด้วย Java 7 ตอนนี้คุณสามารถทำ null safe เท่ากับ:

Objects.equals (x, y)

(ObjectUtils.equals ของห้องสมุดจาการ์ตาคอมมอนส์ () ล้าสมัยไปแล้วกับ Java 7)


วิธีนี้ยังนำไปใช้ใน Googles Dependency injection-libray Guice
Niels

1
Spring ยังใช้วิธีการที่คล้ายกัน: nullSafeEquals บนคลาส
ObjectUtils

2
Google Guava มี Objects.equals () ด้วย
Spina

นี่เป็นเพียง nullsafe ที่เกี่ยวข้องกับ x สำหรับ y มันขึ้นอยู่กับการใช้งานเท่ากับของวัตถุที่กำหนด (การใช้งานคือreturn (x == y) || (x != null && x.equals(y));)
emi-le

23

หากคุณสามารถเข้าถึงห้องสมุด Jakarta Commons ได้โดยบังเอิญมีObjectUtils.equals ()และฟังก์ชันที่มีประโยชน์อื่น ๆ อีกมากมาย

แก้ไข: อ่านคำถามผิดในตอนแรก


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.