我遇到过最奇怪的java问题,NoClassDefFoundError是由于Annotation?

时间:2012-04-16 00:20:14

标签: java android annotations noclassdeffounderror

我想我遇到了一些粗暴的事情......让我知道你的想法。

我一直在为 Android 的基础设施项目进行开发,该项目使用 Annotations ,我用它来定义一些事情。

看看下面的注释,它应该编译,它确实如此,但是当我在设备上运行它时,我得到一个NoClassDefFoundException。

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

    int viewId() default -1;

    int[] viewIds() default {};

    ViewUI_Action[] listeners() default {};

    boolean forDev() default false;

}

这是 THE 实施:

@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 个答案:

答案 0 :(得分:1)

即使对于大小为1的数组,似乎listeners字段也有数组初始化器语法。

希望有所帮助: - )