GraalJS中多函数接口SAM类型无法像Nashorn一样在JS中作为可调用函数时自动解析
GraalJS中多函数接口SAM类型无法像Nashorn一样在JS中作为可调用函数时自动解析
我之前也碰到过这个头疼的问题,来跟你详细说下情况:
当一个Java类实现了多个**不同参数个数(arity)**的函数式接口,然后在JavaScript代码里把这个类的实例当作可调用函数来使用时,GraalJS没办法像Nashorn那样,根据你传入的参数数量自动匹配对应的方法——它只会固定绑定其中一个方法,完全不考虑参数个数的差异。
举个实际场景的例子:假设你有个Java类同时实现了Runnable(无参)、Function<String, String>(单参)和BiFunction<String, String, String>(双参)这三个函数式接口。在Nashorn里,你直接写obj()、obj("hello")、obj("hello", "world")就能分别触发对应的无参、单参、双参方法;但到了GraalJS里,不管你传几个参数,都会调用同一个预设的方法,完全不会自动切换匹配。
目前这个问题还没有内置的自动解决办法,临时的替代方案只能是在JS代码里显式调用对应方法,比如用obj.run()、obj.apply("hello")、obj.apply("hello", "world")这样的方式来指定执行哪个方法,虽然不如自动匹配来得便捷,但至少能满足功能需求。
内容来源于stack exchange
相关产品推荐
相关产品推荐

