docsに従って、インターフェイスを期待するメソッドにブロックを渡すことができ、ブロックはそのインターフェイスの匿名実装に変換されます。超カッコイイ!
ただし、Java クラスの Ruby サブクラスがあり、インターフェイスを実装する何かを返すメソッドがあります。
// 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で)Parentに追加できます
protected MyInterface passThrough(MyInterface mi) { return mi; }
そして、これは機能します:
def getIt
passThrough {|thing|
puts thing.inspect
}
end
ただし、これは本当にハッキーに思えます。これは JRuby の仕組みの単なる見落としですか、それとも別の解決策がありませんか?