我在通过枚举在交换机内初始化一个变量时遇到问题。看起来Android Studio(和Eclipse)忽略了这样一个事实,即我正在初始化变量全部的情况并声明:“变量'x'可能未被初始化”。我不想提出一个默认情况。在枚举中进行变量初始化,或者在编译时阻止缺少枚举的枚举
代码示例:
public enum eTest {
One,
Two
}
public class Test {
public void method(eTest value) {
String toPrint;
switch (value) {
case One:
toPrint = "One";
break;
case Two:
toPrint = "Two";
break;
}
System.out.println(toPrint); // <-- said error
}
}
我不想初始化变量,但我不知道是有办法做到这一点不初始化(我爱向学习,我错了)。 假设这是不可能的,我想确保新的枚举值将添加到此交换机。
首先尝试:
I've tried adding the "Enum 'switch' statement that misses case" to the Android Studio settings,但有两个问题:
- 它不会失败的版本(只显示一个红色标记的地方)。
- 它取决于本地配置,我希望能对所有用户强制执行某些操作。
第二个尝试:
我发现,这应该有可能与在的build.gradle文件(我使用过Android Studio,如前所述)lintOptions,但我不能作出期望它的工作。我已经添加了下列选项中的build.gradle:
lintOptions {
enable 'EnumSwitchStatementWhichMissesCases'
abortOnError true
}
这并没有工作,以及,我假设,因为可能存在两个问题:
- 名称是错误的(我把它来自Android Studio在使用设置时创建的xml)。
- 此问题的默认严重性是警告而不是错误,但是我无法找到如何更改问题的严重性。
第三次尝试:
It should be possible to add a lint.xml to the Android Studio project,我想这个问题,以及,但它并没有构建失败,所以我假设我做错了那里。我把在AndroidManifest位置如下:
<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="EnumSwitchStatementWhichMissesCases" severity="error" />
</lint>
此外:
我见过this answer,但是这不是我要找的,而且因为这是关于一个特定的构建过程中,我希望有更好的解决方案。
问题:
是否有可能:
1.解决原来的问题。
编辑:不能这样做(感谢黑带 - 见下面的评论)
,如果没有:
2.上述选项添加到构建过程(也可以在其他用户执行的任何选项是欢迎) 。
编辑:澄清 - 我想知道如何防止枚举缺少在编译时间的情况下,在Android中使用棉绒工作室
“我发现这应该可以在build.gradle文件中使用lintOptions” - 因为这不是来自Android Lint,我对此表示怀疑。您在Android Studio中配置的内容在第一次尝试中是IntelliJ IDEA检查,其中一项不属于Android Lint类别。 “应该可以将lint.xml添加到Android Studio项目中” - 再次,这不是Android Lint检查。 Android Lint专注于Android(因此,名称)。 'enum'是一种通用的Java语言结构。 – CommonsWare
您可以看到是否可以配置[checkstyle插件](https://gradle.org/docs/current/userguide/checkstyle_plugin.html)以捕获此事并且构建失败。 – CommonsWare
*在开关块中有一个默认标签,或者在开关表达式后有V [un]分配。 [Here](http://docs.oracle.com/javase/specs/jls/se7/html/jls-16.html#jls-16.2.9) – Blackbelt