Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于Java调用Pudding.create 时,如何使用高阶函数的问题 #2

Closed
snpmyn opened this issue Jun 27, 2019 · 4 comments
Closed
Labels
good first issue Good for newcomers

Comments

@snpmyn
Copy link

snpmyn commented Jun 27, 2019

create方法里面两个参数,但是你的代码里面是一个参数。用不成。

@snpmyn
Copy link
Author

snpmyn commented Jun 27, 2019

还是只能在kotlin中使用?谢谢

@o0o0oo00
Copy link
Owner

o0o0oo00 commented Jul 1, 2019

还是只能在kotlin中使用?谢谢

第二个参数是kotlin中的高阶函数,就是如果lambda是参数的最后一位,可以提到括号外面,create后面跟的花括号就是它的第二个参数,具体的高阶函数和Java交互的写法不是很友好,还是推荐Kotlin 使用

感谢使用
阿里嘎多~~~

@o0o0oo00 o0o0oo00 closed this as completed Jul 1, 2019
@o0o0oo00
Copy link
Owner

o0o0oo00 commented Jul 1, 2019

create方法里面两个参数,但是你的代码里面是一个参数。用不成。

接上面,高阶函数(lambda 作为参数)在java中的体现 是一个继承了 Function接口 的接口,不同数量的参数会体现为Function0、Function1<in P1, out R>等等。
而我们的create(activity: AppCompatActivity, block: Choco.() -> Unit)第二个参数是指定了接收者的lambda表达式,Choco.() -> Unit 这块的意思是这个表达式只能是Choco使用,返回值是一个Unit,主要作用就是配置Choco相关的参数。前面的Choco.在编译之后其实是当做一个参数传入到表达式的中的。
so! 我们只需要new出一个参数的Function1就可以来使用Java调用Pudding啦!

 Pudding.create(this, new Function1<Choco, Unit>() {
            @Override
            public Unit invoke(Choco choco) {
                choco.setText("Java Call");
                return null;
            }
        }).show();

@o0o0oo00 o0o0oo00 changed the title 参数问题 关于Java调用Pudding.create 的时,如果使用高阶函数的问题 Jul 1, 2019
@o0o0oo00 o0o0oo00 changed the title 关于Java调用Pudding.create 的时,如果使用高阶函数的问题 关于Java调用Pudding.create 时,如果使用高阶函数的问题 Jul 1, 2019
@o0o0oo00 o0o0oo00 changed the title 关于Java调用Pudding.create 时,如果使用高阶函数的问题 关于Java调用Pudding.create 时,如何使用高阶函数的问题 Jul 1, 2019
@o0o0oo00 o0o0oo00 pinned this issue Jul 1, 2019
@o0o0oo00 o0o0oo00 added the good first issue Good for newcomers label Jul 1, 2019
@ghost
Copy link

ghost commented Oct 20, 2019

create方法里面两个参数,但是你的代码里面是一个参数。用不成。

接上面,高阶函数(lambda 作为参数)在java中的体现 是一个继承了 Function接口 的接口,不同数量的参数会体现为Function0、Function1<in P1, out R>等等。
而我们的create(activity: AppCompatActivity, block: Choco.() -> Unit)第二个参数是指定了接收者的lambda表达式,Choco.() -> Unit 这块的意思是这个表达式只能是Choco使用,返回值是一个Unit,主要作用就是配置Choco相关的参数。前面的Choco.在编译之后其实是当做一个参数传入到表达式的中的。
so! 我们只需要new出一个参数的Function1就可以来使用Java调用Pudding啦!

 Pudding.create(this, new Function1<Choco, Unit>() {
            @Override
            public Unit invoke(Choco choco) {
                choco.setText("Java Call");
                return null;
            }
        }).show();

Still not work on Java 7/8,org.objectweb.asm may help (gen proxy/jmethod)...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants