我想我碰到了一些粗糙的東西......讓我知道你的想法。我遇到過的最怪異的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錯誤說:
,且Eclipse無法找到包含這方面的階級。
那麼你怎麼看?編譯類時出錯?
亞當。
如若'listeners'領域有數組初始化語法甚至一個大小的數組?我不知道如何原諒註釋語法是... – 2012-04-16 00:26:52
嗯......看着它。我使用了一個常量數組......也許情況就是這樣呢?我會檢查出來的。 – TacB0sS 2012-04-16 00:30:17
我想你明白了... – TacB0sS 2012-04-16 00:30:49