2014-10-30 146 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