2012-08-30 4 views
5

가능한 중복 : (는 false를 돌려 동일

쓰기 TestEquals 클래스 아래에 언급 한 바와 같이 내 동료의


Returning false from Equals methods without Overriding

오늘 나에게 질문을 사용자 정의 또는 사용자 정의 클래스) 코드에서 아래의 sop은 false을 인쇄합니다.

public class Puzzle3 { 
    public static void main(String[] args) { 
    TestEquals testEquals = new TestEquals(); 
    System.out.println(testEquals.equals(testEquals)); 
    } 
} 

참고 : 재정의 할 수 없습니다는 방법 같습니다.

나는 많은 생각하지만 equals.Does의 사람이 그것을 할 수있는 방법 어떤 생각을 무시하지 않고 해결책을 찾을 수 없습니다? 위의 코드는 theorectially 최우선은 객체 메소드에서 일치 한되지 않도록

+7

이 숙제를하지? –

+4

** 과부하 **가 허용됩니까? – home

+2

복제본에는 두 개의 downvotes가 있고 허용 된 응답은 단지 4 개의 upvotes입니다. 이번에는 질문이 훨씬 나아질까요? – maba

답변

17

public boolean equals(TestEquals equals) { 
    return false 
} 

재정의하는 데 사용하는 당신은 것

+5

당신이 그것을 좋아한다면'String'을 돌려 줄 수도 있습니다. –

+0

놀라운! 지금까지 13 upvotes. – maba

+0

@DuncanJones 좋은 지적 나는 그것을 가리키는 +1을 생각하지 않았다 – RNJ

0

나는 이유를 알고하지 않는 타입의 객체의 입력 매개 변수를 필요 일치 한 누구나 그걸 원한다. 아래 그림과 같이하지만 당신은 방법을 만들 수 있습니다 SuperEquals 어떤 TestEquals의 슈퍼 클래스가 아니라 Object입니다

public boolean equals(SuperEquals equals) { return false; } 

.

1

위에서 언급 한 바와 같이, 당신이 그렇게 같은 방법을 쓸 수있다 :

public TestEquals extends Something { 
} 

public Something { 
    @Override public boolean equals(Object o) { 
     return false; 
    } 
} 
11

편집 :

public boolean equals(TestEquals e) { 
    return false; 
} 

또한이 TestEquals 경우 다른 객체를 확장 할 수는 분명히 someone else 처음이 아이디어에 도착 다른 스레드에서는이 코드를 사용하는 것이 훨씬 간단합니다.


class TestEquals { 

    static { 
    System.setOut(new PrintStream(new FilterOutputStream(System.out) { 
     public void write(byte[] buf, int pos, int len) throws IOException { 
     if (len >= 4 && buf[pos] == 't') { 
      out.write(new byte[] { 
       (byte) 'f', (byte) 'a', (byte) 'l', (byte) 's', (byte) 'e' 
      }); 
      out.write(buf, pos + 4, len - 4); 
     } else { 
      out.write(buf, pos, len); 
     } 
     } 
    })); 
    } 
} 

무시하거나 equals와 함께 할 아무것도 과부하가 걸리지 않는이 끔찍한 해킹,하지만 TestEquals의 인스턴스를 생성하는 행위는 System.out를 래핑로드 할 클래스를 야기 그래서 't'을 시작 후속 인쇄 첫 번째 4 바이트 대신에 "false"이 인쇄됩니다. (기본 인코딩이 매우 이국적인 무언가가 아니라고 가정합니다.)

+0

Excelent 아이디어 : – gontard

+0

+1 out-of-the-box. – maba

-1

내 iPad에서 ... 전략은 aun 속성을 갖는 것과 비슷해야합니다. 속성은 equals의 getter를 통해 액세스됩니다. 당신은 속성이 개인이어야하며 값의 수정이되기 전에 발생하고 값을 읽은 후, 그것은 첫 번째 또는 등호의 두 번째 부분 인 경우는 상관없이 작동하는지 확인 할 수 있도록 등호 무시 될 수 없다는 언급.(구문 오류 죄송합니다) 같은

뭔가 :

public class TestEquals{ 

private int id; 

public int getId(){ 
    int temp; 
    id++; 
    temp=id; 
    id++; 
    return temp; 
} 
} 
+0

Object.equals (Object obj)의 최초의 체크는'if (this == obj) true를 돌려 준다 '입니다. –

관련 문제