2014-12-28 50 views
1

我正在使用建立在AspectJ 1.81上的AJDT 2.2.4。AspectJ和Map <String,Object> Array

考慮這個簡單的方面:

@Aspect 
public class SampleAspect { 
    @Before("@annotation(logMe)") 
    public void beforeAdvice(JoinPoint joinPoint, LogMe logMe) { 
     System.out.println("Before the method"); 
    } 
} 

它打印LogMe註釋這是前一段文字:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface LogMe {} 

現在,我將此註釋一些方法:

public class DummyClass { 
    @LogMe 
    public void doSomething() { 
     SampleUtil sampleUtil = new SampleUtil(); 
     //pass null for simplicity ! 
     sampleUtil.sampleMethod(null); 
     System.out.println("Do Something"); 
    } 
} 

SampleUtil爲

如果我改變 sampleMethod參數別的東西像 Map<String, Object> aMap錯誤會

can not resolve this member: 
void foo.SampleUtil.sampleMethod(java.util.Map[]) [Xlint:unresolvableMember] 

public class SampleUtil {  
    public void sampleMethod(
     Map<String, Object>[] mapArray){ 
    } 
} 

我得到這樣的警告。

爲什麼我會收到此警告?

+1

供參考:您不能在'之前'指定建議方法。這是AspectJ中的保留關鍵字,Eclipse將顯示一條奇怪的錯誤消息。我將編輯您的問題並將其重命名爲'beforeAdvice'。我也將簡化方面代碼,仍然保持問題的可重現性。 – kriegaex

回答

0

該警告意味着它無法在inpath中找到foo.SampleUtil。 inpath與類路徑相似,用於確定哪些方面與哪些方面交織。

我猜foo.SampleUtil是在另一個項目中,這意味着您需要明確地將項目添加到您的inpath。

由於您在Eclipse中使用AJDT,因此可以轉到aspect項目的屬性頁面並選擇AspectJ構建路徑選項卡。選擇Inpath並添加其他項目。

+0

這些文件位於同一個項目中。 AJDT是否提供任何日誌文件,也許我可以在此處查看併發布以提供幫助。也正如我提到當我將** java.util.Map [] **更改爲** java.util.Map **時,警告已解決。 –

+0

這實際上看起來像一個編譯器錯誤。代碼似乎按預期運行,但警告正在吐出。你可以將你的方面轉換爲代碼風格方面嗎?即 - 刪除註釋並使用'aspect'而不是'class'。通常,代碼樣式aspectj效果更好。我自己試了一下,不再看到這個bug。另外,如果你有時間,我會建議在aspectj bugzilla上提出一個bug:http://bugs.eclipse.org。 –

+2

僅供參考,我已經轉載了該問題並創建了[bug ticket](https://bugs.eclipse.org/bugs/show_bug.cgi?id=456357)。 – kriegaex

相關問題