如何在Java中声明无法访问的代码?
我在switch语句中遇到了一个复杂的情况,当它发生时,总是以返回、中断或。。。。我想用lint的/*UNREACHABLE*/声明来向任何阅读代码的人表明,它不会落入下一个例子中,这是Java中的一个常见错误。我正在寻找一种更正式的方式来表明这一点,理想情况下,如果无法访问,就会导致编译器警告或错误。有什么想法吗如何在Java中声明无法访问的代码?,java,Java,我在switch语句中遇到了一个复杂的情况,当它发生时,总是以返回、中断或。。。。我想用lint的/*UNREACHABLE*/声明来向任何阅读代码的人表明,它不会落入下一个例子中,这是Java中的一个常见错误。我正在寻找一种更正式的方式来表明这一点,理想情况下,如果无法访问,就会导致编译器警告或错误。有什么想法吗 switch (x) { case 1: if (...) { switch (.) {
switch (x) {
case 1:
if (...) {
switch (.) {
...
}
} else {
...
}
/*UNREACHABLE*/
case 2:
...
}
代码确实是不可访问的,Java编译器知道它是不可访问的,因此我不能将任何普通代码放在那里,因为编译器会将其标记为不可访问的代码。如果您对恶意攻击持开放态度,您可以在有效代码之间插入未使用的代码:
switch (x) {
case 1:
if (...) {
switch (.) {
...
}
} else {
...
}
case -1:
/*UNREACHABLE*/
throw new RuntimeException("nope");
case 2:
...
}
就我个人而言,我不认为我会使用它,但它应该可以工作。如果不应该访问它,您可以抛出一个异常。您可以创建自己的异常,并解释为什么代码不应该到达stacktrace中的那个点。也许会help@PaulLemarchande和@Erik:如果我在那里放了一个in-throw语句或任何其他语句,它会得到一个编译器错误,正如我在你的评论后澄清的那样。@JohnTangBoyland如果你把它变成一个。这是个坏主意;您的代码不应该如此混乱,以至于需要一个无法访问的标记。看到嵌套的开关和if-else块对我来说意味着。。。这应该使它更具可读性,这应该是您的目标。@Elliot Frisch:我认为您不理解编译器错误:甚至添加int x=3;将得到一个错误。Java编译器不允许在无法访问的情况下使用代码,例如在“return”语句之后。这确实回答了这个问题。@JohnTangBoyland:正如我前面提到的,我宁愿搜索linter。例如,我刚刚遇到了Lint4j,它说它会检查漏洞百出的案例陈述: