2014-10-30 88 views
1

我會通過Java 6的舊代碼庫,我看到這個界面番石榴功能

public static Function<Model, Map<? extends Class<? extends Feature>, Map<String, String>>> getRequiredFeatures = new Function<Model, Map<? extends Class<? extends Feature>, Map<String, String>>>() 
{ 
    @Override 
    public Map<? extends Class<? extends Feature>, Map<String, String>> apply(final Model input) 
    { 
    return input.getRequiredFeatures(); 
    } 
}; 

之一除了大量的通用類型的,我不明白是恰好正在做什麼這裏。 Arent我們只是允許在接口中聲明方法簽名?那麼這是如何工作的。我也看到了這也是我不明白的代碼有很多這樣的:

public static Function<Model, Set<Model>> unwrap = function(FuncitoGuava.<Model, Set<Model>>functionFor(callsTo(Model.class).unwrap())); 

如我一般的非常新的FP和番石榴這可能是一個noob問題。所以請在這個問題上輕鬆一下。謝謝。

回答

2

第一個代碼片段不是方法聲明。這是一個字段聲明。

字段的類型是com.google.commons.base.Function<F, T>這是一個接口,因此你需要實現這個接口的所有方法(這是在這裏實際上是public Map<...> apply(final Model input)

+0

有一個方法'apply'的,但它是一部分的匿名'Function'類,而不是接口本身。 – 2014-12-17 15:05:15