2016-07-13 93 views
2

我在下面的代碼中有一個功能接口,其中有一個抽象方法和一個對象方法覆蓋。因此,當我爲此編寫Lambda表達式時,如何實現我的equals方法。要做到這一點如何在Java中使用lambdas實現兩個抽象方法?

import static java.lang.System.out; 

public class Test { 
    public static void main(String[] args) { 
     AddToString test = a -> (a + " End"); 
     out.println(test.stringManipulation("some string")); 
     out.println(test.increment(5)); 
     out.println(test.equals(null)); 
    } 
} 

@FunctionalInterface 
interface AddToString { 
    String stringManipulation(String a); 
    default int increment(int a) { return a+1; } 
    @Override 
    public boolean equals(Object obj); 
} 

一種方法是創建一個類似如下匿名類,但有使用lambda表達式更好的方法 -

public class Test { 
    public static void main(String[] args) { 
     AddToString test = new AddToString() { 
      public String stringManipulation(String a) { 
       return a + " End"; 
      } 
      @Override 
      public boolean equals(Object Obj) { 
       //Just testing whether it overrides 
       return 5==5; 
      } 
     }; 
     out.println(test.stringManipulation("some string")); 
     out.println(test.increment(5)); 
     out.println(test.equals(null)); 
    } 
} 
+1

一個合理的lambda表達式應該如何基於'equals'實現,它不能訪問'this'或者任何接口的方法?即使是匿名的基於類的實現也很難想象。 – Holger

回答

7

你不能。如果你需要覆蓋equals,你需要創建一個類(匿名或其他),你不能用lambda來完成。