interface Observable<T> {
Subscription subscribe(Observer<T> observer);
default Observable<T> filter(Predicate<T> fn) {
return observer -> {
Observer<T> obsT = new Observer<T>() {
@Override
public void onNext(T t) {
if (fn.test(t))
observer.onNext(t);
}
@Override
public void onError(Throwable t) {
observer.onError(t);
}
@Override
public void onComplete() {
observer.onComplete();
}
};
return this.subscribe(obsT);
};
}
}
this
在上面的代码中指的是什么,有人可以帮忙...
答案 0 :(得分:1)
它告诉当前的Observable
对象实例在处理完Subscribe
调用并返回新的Filter
作为{{1 }}。
更具体地说,Subscription
是指向正在执行当前作用域的对象实例的指针。
答案 1 :(得分:1)
行为在JLS §15.27.2中定义:
与出现在匿名类声明中的代码不同,lambda正文中出现的名称以及
this
和super
关键字的含义以及引用声明的可访问性与周围环境相同上下文(lambda参数引入新名称除外)。
用简单的英语来说,这意味着this
引用了周围类型的当前实例。因此,在您的示例中,this
引用了Observable<T>
的当前实例。
这也意味着如果周围的方法是静态的,则不能使用this
:
import java.util.function.Supplier;
public class Sample {
int x = 0;
public static void main(String... args) {
Supplier<String> function = () -> {
return Integer.toString(this.x); // This is line 8
};
}
}
如果您尝试编译此代码,则编译器将产生以下错误:
Sample.java:8: error: non-static variable this cannot be referenced from a static context
return Integer.toString(this.x);
^
1 error