2012-08-28 94 views
-2

TestEquals class使Puzzle3類的主要方法打印false從等於方法返回假而不覆蓋

注意:您無法覆蓋TestEquals類的equals方法。

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

我沒有找到一個方法來做到這一點,請分享您的意見

+0

* 「請分享您的意見」 *這不是一個問題。 –

+0

聽起來像功課,或測試 –

+1

這將是Joshua Bloch的* Java Puzzlers *。 –

回答

4

您不得重寫equals方法,但沒有理由不能重載equals方法。

方法的Object.Equals有原型:

public boolean equals(Object o) { ... } 

要重寫此方法,你必須創建具有相同原型TestEquals的方法。但是,您的問題陳述表明您不允許覆蓋此方法。沒問題,重載方法是完成任務的有效方法。簡單地將以下方法定義添加到TestEquals中:

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

然後就完成了。

+0

非常棒的傢伙:) –

3

而不是覆蓋等於你可以超載等於

class TestEquals { 
    // a common mistake which doesn't override equals(Object) 
    public boolean equals(TestEquals te) { 
      return false; 
    } 
} 
3

繼將打印假:)

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.OutputStream; 
import java.io.PrintStream; 
import java.io.UnsupportedEncodingException; 

public class TestEquals { 

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

    static { 
    System.setOut(new CustomPrintStream(new PrintStream(System.out))); 
    } 

    public static class CustomPrintStream extends PrintStream { 

    /** 
    * This does the trick. 
    */ 
    @Override 
     public void println(boolean x) { 
     super.println(!x); 
    } 

    public CustomPrintStream(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException { 
     super(file, csn); 
    } 

    public CustomPrintStream(File file) throws FileNotFoundException { 
     super(file); 
    } 

    public CustomPrintStream(OutputStream out, boolean autoFlush, String encoding) 
     throws UnsupportedEncodingException { 
     super(out, autoFlush, encoding); 
    } 

    public CustomPrintStream(OutputStream out, boolean autoFlush) { 
     super(out, autoFlush); 
    } 

    public CustomPrintStream(OutputStream out) { 
     super(out); 
    } 

    public CustomPrintStream(String fileName, String csn) throws FileNotFoundException, 
                   UnsupportedEncodingException { 
     super(fileName, csn); 
    } 

    public CustomPrintStream(String fileName) throws FileNotFoundException { 
     super(fileName); 
    } 
    } 
} 
+0

+1從攻角的角度比預期的;) – Alpedar