我想我遇到了一些粗暴的事情......让我知道你的想法。
我一直在为 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错误说:
Eclipse无法找到包含此字段的类。
那你觉得怎么样?编译类时出错?
亚当。
答案 0 :(得分:1)
即使对于大小为1的数组,似乎listeners
字段也有数组初始化器语法。
希望有所帮助: - )