2012-04-16 13 views
1

我想我碰到了一些粗糙的東西......讓我知道你的想法。我遇到過的最怪異的java問題,由於Annotation引起的NoClassDefFoundError?

我一直在開發,而現在的Android它採用註解,我用它來定義一些事情的紅外線項目。

看看下面的註釋,它應該編譯,它會,但是當我在設備上運行它,我得到一個NoClassDefFoundException。

@Target({FIELD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ViewIdentifier { 

    int viewId() default -1; 

    int[] viewIds() default {}; 

    ViewUI_Action[] listeners() default {}; 

    boolean forDev() default false; 

} 

這是實現:

@SuppressWarnings("unused") 
@ViewIdentifier(
     listeners = ViewUI_Action.OnClickAsCollection, 
     viewIds = {R.id.AccelerometerEngineeringScreen, R.id.RotationVectorEngineeringScreen, R.id.NetworkEngineeringScreen, 
       R.id.MagneticEngineeringScreen, R.id.OrientationEngineeringScreen, R.id.GPS_EngineeringScreen, R.id.CallsEngineeringScreen, 
       R.id.UpgradeAppButton, R.id.DEV_Action_Button, R.id.FYI_Button}) 
private View[] modelViews; 

如果我刪除ViewIdentifier註釋,代碼編譯並運行正常,應用程序啓動,但如果我回到註釋中, NoClassDefFoundError持續存在。

這不是一個乾淨的構建問題,在發佈之前我一直非常小心,另外,缺少的類文件位於bin/classes中,並且當我刪除註釋時,無論乾淨構建如何,它都可以工作。我已經嘗試刷新工作區,重建它,關閉項目,重新啓動Eclipse以及其他技巧。

最奇怪的是,如果我反轉註釋的參數,例如。

@SuppressWarnings("unused") 
@ViewIdentifier(
     viewIds = {R.id.AccelerometerEngineeringScreen, R.id.RotationVectorEngineeringScreen, R.id.NetworkEngineeringScreen, 
       R.id.MagneticEngineeringScreen, R.id.OrientationEngineeringScreen, R.id.GPS_EngineeringScreen, R.id.CallsEngineeringScreen, 
       R.id.UpgradeAppButton, R.id.DEV_Action_Button, R.id.FYI_Button}, 
     listeners = ViewUI_Action.OnClickAsCollection) 
private View[] modelViews; 

我得到一個Eclipse錯誤說:

enter image description here

,且Eclipse無法找到包含這方面的階級。

那麼你怎麼看?編譯類時出錯?

亞當。

+1

如若'listeners'領域有數組初始化語法甚至一個大小的數組?我不知道如何原諒註釋語法是... – 2012-04-16 00:26:52

+0

嗯......看着它。我使用了一個常量數組......也許情況就是這樣呢?我會檢查出來的。 – TacB0sS 2012-04-16 00:30:17

+0

我想你明白了... – TacB0sS 2012-04-16 00:30:49

回答

1

似乎listeners字段即使對於大小爲1的數組也有數組初始值設定語法。

希望幫助:-)

+0

並認爲我試圖保存一些內存... – TacB0sS 2012-04-16 07:52:55