接口中的变量/构造函数

时间:2015-02-12 11:10:41

标签: java android picasso

我正在浏览picasso source code并在lines 80-94中遇到了这个块:

    public interface RequestTransformer {
    /**
     * Transform a request before it is submitted to be processed.
     *
     * @return The original request or a new request to replace it. Must not be null.
     */
    Request transformRequest(Request request);

    /** A {@link RequestTransformer} which returns the original request. */
    RequestTransformer IDENTITY = new RequestTransformer() {
      @Override public Request transformRequest(Request request) {
        return request;
      }
    };
  }

根据我的理解,它在某种程度上声明了一个带有静态构造函数的接口中的变量。有人可以解释该代码应该做什么吗?我读了一篇关于接口中构造函数的类似帖子(Constructor in an Interface?),但我仍然不明白为什么这个案例不适用于那里。

由于

1 个答案:

答案 0 :(得分:1)

这实际上不是变量。这是匿名实现的常量。在界面中,它被编译为:

public interface RequestTransformer {
    Request transformRequest(Request request);

    public static final RequestTransformer IDENTITY = new RequestTransformer() {
        @Override
        public Request transformRequest(Request request) {
            return request;
        }
    };
}

这是一种不好的做法(在接口中实现):)