Groovy中的强制混淆
为什么会出现以下情况Groovy中的强制混淆,groovy,Groovy,为什么会出现以下情况 class Test { @Test void go() { def foo1 = new MockFoo1() as Foo def foo2 = new MockFoo2() as Foo } interface Foo {} class MockFoo1 {} class MockFoo2 {} } 在foo2强制上导致java.lang.IllegalArgumentException:参数类型不匹配 只有在一条执行路
class Test {
@Test
void go() {
def foo1 = new MockFoo1() as Foo
def foo2 = new MockFoo2() as Foo
}
interface Foo {}
class MockFoo1 {}
class MockFoo2 {}
}
在foo2强制上导致java.lang.IllegalArgumentException:参数类型不匹配
只有在一条执行路径期间,我将两个不同类型的对象强制到同一接口时,才会发生这种情况。groovy认可的使用闭包或映射来实现这种duck类型的方法工作得很好
任何光线都值得欣赏。这是ProxyGenerator的一个bug
适配器缓存
。作为一种解决方法,您还可以使用一些Groovy技巧来实现这一点:
interface Foo {
static a = {
[MockFoo1, MockFoo2].each {
it.metaClass.asType = { Class klazz ->
try {
DefaultGroovyMethods.asType(delegate, klazz)
} catch (e) {
def cache = ProxyGenerator.INSTANCE.@adapterCache.@cache
cache.each { k, v ->
cache.remove(k)
}
DefaultGroovyMethods.asType(delegate, klazz)
}
}
}
}()
}
class MockFoo1 {}
class MockFoo2 {}
def a = new MockFoo1() as Foo
def b = new MockFoo2() as Foo
assert a instanceof Foo
assert b instanceof Foo
希望这有帮助 对我来说好像是个虫子。。。吉拉,也许吧?哦,真的。然后我会记录一个bug。谢谢,这是什么错误号?