接口中的番石榴功能

时间:2014-10-30 10:21:56

标签: java interface functional-programming guava

我正在浏览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();
  }
};

除了许多通用类型之外,我不明白的是这里正在做什么。我们只是允许在接口中声明方法签名吗?那怎么回事?我也在代码中看到了很多这个,我也不明白:

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

这可能是一个菜鸟问题,因为我对FP和番石榴一般都是新手。所以请轻松解决这个问题。感谢。

1 个答案:

答案 0 :(得分:2)

第一个代码段不是方法声明。这是一个现场宣言。

该字段属于com.google.commons.base.Function<F, T>类型,它是一个接口,因此您需要实现此接口的所有方法(实际上这里是public Map<...> apply(final Model input)