[英]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.