我正在使用创建方法(Xtend doc)来执行 Xtext 中语言的模型转换。我需要清除创建方法的内部缓存,如何实现?
获取干净缓存的正确方法是创建包含 create 方法的类型的新实例。
在进行模型转换时,包含 create 方法的类通常是单例。如果这里也是这种情况,我建议使用作用域依赖注入(例如自定义 Guice 作用域)或这些类的提供程序,在适当的时候返回新实例。
也就是说,可以清除创建缓存。但这看起来有点像黑客,因为您需要访问生成的属性,而您实际上不应该直接使用这些属性。
如果您有一个名为
createElement
的创建方法,那么 Xtend 将生成一个名为 _createCache_createElement
、类型为 HashMap
的私有属性。该属性可通过 Xtend 代码访问。因此,要清除缓存,您可以调用:
_createCache_createElement.clear()
如果您有多个同名的 create 方法,请小心:它将生成
_createCache_createElement_1
、_createCache_createElement_2
等属性。您必须检查哪个映射属于哪个创建方法。我想如果方法签名发生变化,数字也可能会发生变化,所以在这种情况下我会避免访问地图。如果您使用 Eclipse,您可以在编辑器中右键单击,然后“打开生成的文件”来检查 Xtend 生成的内容。