gpt4 book ai didi

java - 当需要接口(interface)时,我可以在 JRuby 中返回匿名闭包吗?

转载 作者:行者123 更新时间:2023-12-02 06:47:18 25 4
gpt4 key购买 nike

the docs ,我可以将一个 block 传递给需要接口(interface)的方法,并且该 block 将转换为该接口(interface)的匿名实现。太酷了!

但是,我有一个 Java 类的 Ruby 子类,它有一个应该返回实现接口(interface)的东西的方法。

// Java
public abstract class Parent {
public MyInterface getIt();
}
# Ruby
class Child < Parent
def getIt
# Need to return an implementation of MyInterface?
end
end

我尝试过制作一个 Proc 和一个 lambda,但这些都不起作用。我可以向父级(Java 中)添加一个强制自动转换的方法

protected MyInterface passThrough(MyInterface mi) { return mi; }

然后就可以了:

def getIt
passThrough {|thing|
puts thing.inspect
}
end

这看起来确实很hacky。这只是对 JRuby 工作方式的疏忽,还是我错过了一些替代解决方案?

最佳答案

是的 - 你应该能够做到这一点......只需在 proc/lambda 上使用 to_java :

class Child < Parent
def getIt
lambda { |*args| puts args.inspect }.to_java(Java::MyInterface)
end
end

关于java - 当需要接口(interface)时,我可以在 JRuby 中返回匿名闭包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18490823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com