接口中的变量/构造函数
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;
}
};
}
这是一种不好的做法(在接口内实现):)
我正在浏览 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;
}
};
}
这是一种不好的做法(在接口内实现):)