문제

JDK에는 평등을 위해 두 개의 객체를 비교하여 널을 설명하는 방법이 있습니까? 이 같은:

public static boolean equals(Object o1, Object o2)
{
    if (o1 == null)
    {
        return o2 == null; // Two nulls are considered equal
    }
    else if (o2 == null)
    {
        return false;
    }

    return o1.equals(o2);
}

이 방법이 이미 어딘가에 존재해야한다고 생각하기 때문에이 방법을 직접 작성하는 것이 어리석은 것 같습니다.

도움이 되었습니까?

해결책

Java 7.0은 새로운 편리한 클래스를 추가했습니다. Objects.

여기에는 정확히 방법이 있습니다. Objects.equals(Object a, Object b)

다른 팁

Apache Commons Lang은 다음과 같은 방법을 가지고 있습니다. Objectutils.equals (Object1, Object2). 당신은 그러한 방법에 대한 제네릭을 원하지 않으며, 적어도 일반적으로 사용되는 가짜 컴파일 오류로 이어질 것입니다. Equals는 객체의 클래스를 확인하고 False를 반환하는 것이 매우 잘 알고 있거나 계약의 일부입니다. 따라서 추가 유형 안전이 필요하지 않습니다.

fwiw, 이것은 나의 구현이었습니다.

private static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}

내 응용 프로그램에서 A와 B는 항상 동일한 유형이라는 것을 알고 있지만 A.Equals ()가 합리적으로 구현 된 경우에는 이것이 제대로 작동한다고 생각합니다.

public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}

nullpointerexceptions에 대해 걱정이된다면 다음과 같은 평등을 테스트 할 수 있습니다.

if (obj1 != null && obj1.equals(obj2)) { ... }

일반 계약 equals() 널이 아닌 객체는 절대로 널 참조와 동일하지 않아야하며 equals() 객체를 NULL 참조와 비교하는 경우 메소드가 False를 반환해야합니다 (NPE를 던지지 않음).

내가 필요로하고 "이것은 너무 일반적인 자바가 그것을 가지고 있어야한다"고 생각할 때마다, 나는 그것을 찾지 못한다. 나는 자카르타 커먼즈 프로젝트를 확인한다. 거의 항상 그것을 가지고 있습니다. Commons-Lang API (가장 기본적인 유틸리티가있는)를 빠르게 검색하면 equals() 원하는 것을 제공하는 방법.

자카르타 커먼즈 랭 API는 당신이 찾고있는 것을 가지고 있습니다 Objectutils.equals (객체, 개체)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top