1

我想我遇到了一些困难......让我知道你的想法。

我一直在开发一个使用Annotations的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 无法找到包含该字段的类。

所以你怎么看?编译类出错?

亚当。

4

1 回答 1

1

listeners即使对于大小为 1 的数组,该字段似乎也具有数组初始值设定项语法。

希望有帮助:-)

于 2012-04-16T02:27:07.263 回答