将实现接口的Groovy映射转换回映射

Wil*_*man 3 groovy

当使用闭包映射在Groovy中实现接口时(如在http://groovy.codehaus.org/Groovy+way+to+implement+interfaces中)有什么办法可以在使用后将对象转换回地图as keyword或asType方法来实现接口?

Phu*_*ong 6

根据您的用例,您似乎可以Map在将其转换为所需的界面之前保留对原始的引用.

但是,查看将Map对象转换为接口的源代码(使用a Proxy),看起来您可以通过获取InvocationHandler委托来重新检索原始地图.

def i = 1
def m = [ hasNext:{ true }, next:{ i++ } ]
Iterator iter = m as Iterator

def d = java.lang.reflect.Proxy.getInvocationHandler(iter).delegate
assert d.is(m)
Run Code Online (Sandbox Code Playgroud)

注意:这取决于Groovy代码的内部,因此使用风险由您自行承担: