当从Groovy 2切换到Groovy 3时,ModelMapper 2.4.4现在似乎无法转换对象。ModelMapper本身并不抛出错误,而只是返回一个对象,该对象的metaClass仍然是初始类,而不是新的转换后类。
下面的代码演示了这一点,当在Groovy 3中运行时(在3.0.2和3.0.9中测试),当访问ModelMapping后返回的对象的任何属性时,会抛出java.lang.IllegalArgumentException: object is not an instance of declaring class
。当在Groovy 2(2.5.15)中运行时,不会发生此错误。
相关性:
第一个
1条答案
按热度按时间hfwmuf9z1#
问题在于
metaClass
被自动Map(因此,testclass.metaClass
被TestClass.metaClass
替换,groovy认为最终的对象是TestClass
的一个示例)。您可以在Map完成后显式设置元类:
或者,使用
@CompileStatic
,这样就根本不会生成元类。或者您甚至可以配置Modelmapper跳过元类: