当前位置: 首页 > 知识库问答 >
问题:

如何从格鲁维 AST 转换访问所有构造函数?

池宸
2023-03-14

我正在编写一个 AST 转换,旨在通过使引用端的 setter 也调用拥有端的 setter 来保持双向 JPA 关系的同步。这在调用 setFoo() 时可靠地工作,但是在构造函数中初始化的变量(由于声明中的初始值设定项语句、构造函数中的新变量或构造函数参数)将不会链接。

为了处理这种情况,我可以打开所有现有的构造函数(以及任何隐式默认构造函数)并添加必要的代码。但是,添加构造函数的一些常见 AST 转换(如 @TupleConstructor)在规范化阶段运行,在此之后没有阶段我可以可靠地插入新指令。

我如何确保我的额外代码被添加到每个构造函数中,包括那些可能被其他转换添加的代码?

共有1个答案

段溪叠
2023-03-14

这里最好的方法不是改变所有的构造函数,而是使用一个对象初始化块,它被复制到所有构造函数的末尾。如果协作类做了一些愚蠢的事情,会有轻微的不安全发布风险,但这与将语句显式添加到构造函数末尾的风险相同。

做到这一点的方法是:

classNode.addObjectInitializerStatements(assignS(target, value));
 类似资料:
  • 我一直不明白为什么我们能够从其他类调用一个类的构造函数。构造函数是一种方法,通常当试图从类中调用方法时,我们必须要么使该方法静态,这样我们就可以以 但是在构造函数的情况下,我们两者都不做。Java如何调用类的构造函数而不执行这些方法中的任何一个?我知道一个类的构造函数必须对你调用它的类可见,也就是说,如果你调用的类构造函数在不同的包中,你必须导入那个包。 那么,Java如何处理调用构造函数,而不必

  • 但是,如果删除转换构造函数“fraction(int nn):nom(nn),den(1){}”或转换运算符“operator double()const{return double(nom)/den;}”,程序运行良好。 我想把分数转换成分数和分数。我可以做什么来既有转换,又有程序编译?

  • 主要内容:转换构造函数,再谈构造函数,对 Complex 类的进一步精简在 C/ C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。 自动类型转换示例: 编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换为 double 类型,然后与 7.5 相加,得到和为 13.5。在向整型变量 a 赋值时,将 13.5 转换为整数 13,然后赋给 a。整

  • 我想在构造函数中访问多个位置的状态值。当我在构造函数中输入console.log(this)时,我可以看到可以访问特定的值,但是当我输入console.log this.state时,我没有定义。 这就是我想象的工作方式(我想访问CSSValue中的状态): 但是,当我运行此代码: 然后我在控制台中得到这个: 但是当我将console.logconsole.log(this.state)它打印未定

  • 我创建了这个扩展方法,它从一个KClass获取所有属性 扩展方法 示例用法 结果 val公司。演示。富。酒吧:科特林。内景 val公司。演示。富。巴兹:科特林。一串 VARcom.demo.Foo.boo:kotlin。字符串? 如何修改此扩展方法以仅返回在主构造函数中声明的属性? 预期成果 val公司。演示。富。酒吧:科特林。内景

  • 我用以下方法加载一个FXML文件 上面的代码运行正常,现在我想访问在控制器类的构造函数中,但它给出了一个错误:线程“JavaFX应用程序线程”java中的异常。lang.NullPointerException。 注意:我已经为文本字段分配了一些默认值,这就是为什么我想访问它们。 下面是我的控制器类 Controller.java 如有任何建议,将不胜感激。谢谢:)