![](/img/trans.png)
[英]AspectJ - Static inter-type declaration on classes implementing a given interface
[英]How to drop/redefine inter-type declaration in AspectJ?
我使用解析器生成器,它生成代表编程语言语法节点的 java 类,以及用于向这些类添加语义的 AspectJ 方面。 我已经扩展/更改了语言的语法,我想重用旧语法的各个方面并修改/扩展它们以应对节点类的变化。
例如,一个旧节点 class 及其方面:
class A {
public T a1;
public U a2;
...
}
aspect Accessors1 {
public T A.getT() {return a1;}
public U A.getU() {return a2;}
}
通过语法修改,class A 发生如下变化:
class A {
public T a1;
public V a2;
public U a3;
...
}
我想重用 Accessors1 方面并添加另一个方面:
aspect Accessors2 {
public V A.getV() {return a2;} // new accessor for new field
public U A.getU() {return a3;} // modification of old accessor
}
我试过这个:
declare precedence: *2, *1;
但我仍然收到此错误: Type mismatch: cannot convert from V to U
即使没有使用 Accessors1.getU(),它仍然是类型检查的,这会导致编译失败。
为什么呢? 如何用新的getU()
? 有没有办法告诉 AspectJ 忽略/删除 Accessors1.getU()?
如果您尝试在第二个 class 中使用以下更改会怎样:
class A {
public T a1;
public U a2;
public V a3;
...
}
第二个方面:
aspect Accessors2 {
public V A.getV() {return a3;} // new accessor for new field
public U A.getU() {return a2;} // modification of old accessor
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.