Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将内部类转换为Lambda_Java_Lambda_Java 8_Inner Classes - Fatal编程技术网

Java 无法将内部类转换为Lambda

Java 无法将内部类转换为Lambda,java,lambda,java-8,inner-classes,Java,Lambda,Java 8,Inner Classes,我正在努力学习Java Lamdas 我正在尝试将以下代码转换为lambda表示,但它不起作用: private void foo(Data data) { Observable.just(data).subscribeWith(new DisposableObserver<Data>() { int count = 0; int pageCount = 0; @Override public void onN

我正在努力学习Java Lamdas

我正在尝试将以下代码转换为lambda表示,但它不起作用:

private void foo(Data data) {
    Observable.just(data).subscribeWith(new DisposableObserver<Data>() {
        int count = 0;
        int pageCount = 0;

        @Override
        public void onNext(Data data) {
            Timber.e("onNext()");
            count = data.getCount();
            pageCount = data.getPage();
        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onComplete() {
            Log.e("class", "onComplete");
            abc(count, pageCount);
        }
    });
}

private void bar(Data data) {
    Observable.just(data).subscribeWith({
        int count = 0;
        int pageCount = 0;

        data -> {
            Timber.e("onNext()");
            count = data.getCount();
            pageCount = data.getPage();
        },
        e  -> e.printStackTrace(),
        () -> {
            Log.e("class", "onComplete");
            abc(count, pageCount);
        }
    });
}
private void foo(数据){
可观察的.just(data).subscribowith(新的可处置的观察者(){
整数计数=0;
int pageCount=0;
@凌驾
公共void onNext(数据){
木材.e(“onNext()”);
count=data.getCount();
pageCount=data.getPage();
}
@凌驾
公共无效申报人(可丢弃的e){
e、 printStackTrace();
}
@凌驾
未完成的公共空间(){
Log.e(“类别”、“未完成”);
abc(计数,页面计数);
}
});
}
专用空心条(数据){
可观察的。只是(数据)。下标({
整数计数=0;
int pageCount=0;
数据->{
木材.e(“onNext()”);
count=data.getCount();
pageCount=data.getPage();
},
e->e.printStackTrace(),
() -> {
Log.e(“类别”、“未完成”);
abc(计数,页面计数);
}
});
}

这给了我错误。我真的不知道如何修复它。

您遗漏了一个重要部分。您不能将任何匿名内部类实例化转换为lambda

引述自:

Java8函数接口的主要好处是,我们可以使用lambda表达式来实例化它们,并避免使用庞大的匿名类实现

功能接口的核心属性是:它有一个单一的抽象方法

例如,可以找到更多细节

除此之外,我认为真正的答案在元层面上:你必须理解你在做什么。意思是:你不使用这个或那个概念,因为你听说过,有人说:“太好了”。你使用它是因为它在你的上下文中是有意义的

当然,你只能决定某些东西是否有用,“正确的东西”。。。当你理解了这个概念。换句话说:真正的答案是退一步(现在);首先研究lambdas的概念。然后决定在何处使用它将为您的代码库带来好处


最后:正如用户Holger在评论中所表达的,在这个内部类中还有一个禁忌;因为它包含字段;甚至被一些方法“共享”;阻止将该类转换为单个纯lambda的另一个方面。

您遗漏了一个基本部分。您不能将任何匿名内部类实例化转换为lambda

引述自:

Java8函数接口的主要好处是,我们可以使用lambda表达式来实例化它们,并避免使用庞大的匿名类实现

功能接口的核心属性是:它有一个单一的抽象方法

例如,可以找到更多细节

除此之外,我认为真正的答案在元层面上:你必须理解你在做什么。意思是:你不使用这个或那个概念,因为你听说过,有人说:“太好了”。你使用它是因为它在你的上下文中是有意义的

当然,你只能决定某些东西是否有用,“正确的东西”。。。当你理解了这个概念。换句话说:真正的答案是退一步(现在);首先研究lambdas的概念。然后决定在何处使用它将为您的代码库带来好处


最后:正如用户Holger在评论中所表达的,在这个内部类中还有一个禁忌;因为它包含字段;甚至被一些方法“共享”;阻止将此类转换为单个纯lambda的另一个方面。

您能提供您得到的错误吗?subscribowith()是RxJava的一个方法。我只是删掉了其他代码,因为它与当前的问题不太相关。请提供一个实际符合要求的示例。您使用的是RxJava吗,顺便说一句,您的代码以一个点开始,我认为它不会执行。首先修复我已经更新了cdoeCan,您可以提供您得到的错误吗?subscribeWidth()是RxJava的一个方法。我只是删掉了其他代码,因为它与当前的问题不太相关。请提供一个实际符合要求的示例。您使用的是RxJava吗,顺便说一句,您的代码以一个点开始,我认为它不会执行。首先修复我已经更新了CDoE,我如何重构上面的代码来实现lambda表示法?@user2498079我认为你做不到。如果
subscribeWith
接受三个类作为参数,每个类都提供一个函数,那么您就可以@user2498079您认为您可以做什么?看看我对答案的更新。不仅是要实现的方法的数量,而且这个内部类声明字段的事实使得它没有资格将其转换为lambda表达式。我如何重构上面的代码以实现lambda表示法?@user2498079我想你不能。如果
subscribeWith
接受三个类作为参数,每个类都提供一个函数,那么您就可以@user2498079您认为您可以做什么?请看我对答案的更新。不仅要实现的方法的数量,而且这个内部类声明字段的事实使得它没有资格将其转换为lambda表达式。