2015-10-05 148 views
-5
import java.util.function.Function; 

public class LambdaExpression { 


    @SuppressWarnings("rawtypes") 
    public static Function create(int addTo){ 
     int n = 1; 
     Function<Integer, Integer> f = addT -> addTo + n; 

     return f; 
    } 


    public static void main(String[] args){ 
     System.out.println(LambdaExpression.create(5)); 
    } 
} 

運行過程中給我這個錯誤:的Java 8 --- Lambda表達式

LambdaExpression$$Lambda$1/[email protected]

+11

是什麼讓你覺得這是一個錯誤?你已經創建了一個'Function',並且你試圖打印這個函數本身,隱式地調用'toString()'...這給你一個相對不可讀的字符串值(但是不正確)。 –

+0

這是一個錯誤還是隻是你的程序的輸出? –

+0

我的程序的輸出 –

回答

8

如果你想創建一個函數,它增加了1到其輸入的方法創建該功能沒有按不需要一個參數...但是你需要調用這個函數才能執行它。我懷疑你想要的東西:

import java.util.function.Function; 

public class LambdaExpression { 
    public static Function<Integer, Integer> create() { 
     Function<Integer, Integer> f = x -> x + 1;  
     return f; 
    } 

    public static void main(String[] args) { 
     Function<Integer, Integer> f = create(); 
     System.out.println(f.apply(5)); // 6 
    } 
} 

如果實際上想要的功能它增加了任何你傳遞給create方法(而不是一直在增加1),很容易:

import java.util.function.Function; 

public class LambdaExpression { 
    public static Function<Integer, Integer> create(int addTo) { 
     Function<Integer, Integer> f = x -> x + addTo; 
     return f; 
    } 

    public static void main(String[] args) { 
     Function<Integer, Integer> f = create(3); 
     System.out.println(f.apply(5)); // 8 
    } 
} 
+0

/AdderFactoryTest.java:9:錯誤:在類AdderFactory中創建的方法不能應用於給定的類型; 5,AdderFactory.create(1).applyAsInt(4)); ^ 必需:無參數 找到:int 原因:實際和正式參數列表長度不同 1錯誤 –

+0

import java.util.function.Function; 公共類AdderFactory { /* *使「創建」方法(公共,靜態)。它接受一個參數(int addTo)並返回一個函數(確保使用適當的類型)。此函數接受一個整數, *將「addTo」添加到該整數,並將結果作爲整數(整數到整數函數)返回。公共靜態函數 create()函數 f = x - > x + 1; return f; } } –

+0

@RonOhare:你說你想要一個總是加1的函數。爲什麼你想要一個參數呢?請參閱我的編輯,瞭解您可能想要的內容。當你沒有真正清楚地問一個問題時,很難回答... –

1

這是正常現象。

有人故意試圖掩蓋lambda的toString(),以避免依賴lambdas實現的內部工作。他們希望能夠改變lambda表達式的實現,而不必支持toString。雖然我不同意這種方法,但並不會造成錯誤。