接口中的变量/构造函数

variable / constructor in an interface

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

据我了解,它有点像在接口中使用静态构造函数声明一个变量。有人可以解释该代码应该做什么吗?我通读了关于接口中构造函数的类似 post (Constructor in an Interface?),但我仍然不明白为什么这种情况不适用于那里。

谢谢

这其实不是一个变量。这在匿名实现中是不变的。在界面中,它被编译为:

public interface RequestTransformer {
    Request transformRequest(Request request);

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

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