- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是我的代码:
public enum Modification {
NONE, SET, REMOVE;
}
boolean foo(){
for (S s : sList) {
final Modification modification = s.getModification();
switch (modification) {
case SET:
case REMOVE:
return true;
/*
case NONE:
break;
*/
}
}
return false;
}
当代码如上所示时,IntelliJ 会说:
'for' statement does not loop less... () Reports any instance of for, while and do statements whose bodies are guaranteed to execute at most once. Normally, this is an indication of a bug.
只有我进行以下更改,IntelliJ 才会高兴:
for (S s : sList) {
final Modification modification = s.getModification();
switch (modification) {
case SET:
case REMOVE:
return true;
case NONE:
break;
}
}
如果 case NONE: 不包含在 switch 语句中,为什么我的 for 循环不循环?
最佳答案
我刚刚在 eclipse 中试过这个,你最终在 switch 语句上收到编译器警告。
The enum constant NONE needs a corresponding case label in this enum switch on Modification
要解决警告,我有以下选项。
如果我添加缺失的 case 语句,则不再出现警告。与添加丢失的大小写相同会使您的
error
警告从 intellij 中消失。
如果没有 case NONE 语句,您只能看到两种情况,这两种情况都返回 true。在不知道 Modification 的结构和 NONE 的额外值的情况下,看起来这个循环只会在循环的第一次迭代中返回 true。
当然,编译器实际上应该知道 Modification 的值比 SET 和 REMOVE 的值多,所以警告只是为了好的风格。基本上您的代码可以工作,但这里是改进它的方法。
我会选择添加默认语句而不是缺失的大小写。如果以后将更多值添加到枚举中,这将更有前途。例如
switch (modification)
{
case SET:
case REMOVE:
return true;
default:
break;
}
就我个人而言,我不喜欢使用 fall through on switch 语句。恕我直言,您在使代码简洁方面获得的 yield 在易读性方面有所损失。如果稍后有人来并在 SET 和 REMOVE 之间添加一个 case,它可能会引入一个错误。此外,在方法中途使用 return 语句也会导致问题。如果有人想在返回之前添加一些代码,他们可能会错过所有地方。如果该方法非常简单,那么多次返回就可以了,但您已经声明这是一个简化的示例,因此如果这段代码很复杂,我会避免使用它。
如果您能够使用 Java 8,那么这看起来是新流 API 的完美用例。像下面这样的东西应该可以工作。
return sList.stream().anyMatch(
modification -> (modification==Modification.SET || modification==Modification.REMOVE)
);
关于java - IntelliJ 提示 "for statement does not loop"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304002/
在 go lang 中使用“If with a short statement”有什么好处。引用:go tour if v := math.Pow(x, n); v < lim { retur
完全错误: Warning: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT
完全错误: Warning: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT
我有三个存储过程 Sp1、Sp2 和 Sp3。 第一个 (Sp1) 将执行第二个 (Sp2) 并将返回的数据保存到 @tempTB1 中,第二个将执行第三个 (Sp3) 并将数据保存到 @tempTB
我已将 FLAG 设置为 1,并且正在执行 ARG 值应该仅为 DEV。但是我得到的是 ARG= DEV + CLIENTID 000023 // FLAG=1 000026 // I
我已将 FLAG 设置为 1,并且正在执行 ARG 值应该仅为 DEV。但是我得到的是 ARG= DEV + CLIENTID 000023 // FLAG=1 000026 // I
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
PMD告诉我 A switch with less than 3 branches is inefficient, use a if statement instead. 这是为什么呢?为什么是3?他
我刚开始学习 Racket,所以我仍在努力弄清楚这门语言的复杂性。我正在尝试在列表中实现我自己的搜索功能。如果函数找到它,则返回索引,否则返回 -1。 (define (find-index list
在 Kotlin 中,您可以使用类似于三元运算符的 if 语句。 我们可以选择做这样的事情: val x = if (isOdd) 1 else 2 但是如果我们有多个变量需要根据某些条件进行设置,那
在我的 Android 应用程序中,我尝试使用 XMLPullParser 使用以下代码读取 xml 文件: while (eventType != XmlPullParser.END_DOCUMEN
这个问题已经有答案了: Boolean expressions in Java (8 个回答) 已关闭 7 年前。 我遇到过一些情况,其中第一个似乎改变了 boolean 值,而第二个却没有!两者之间
我基本上想做的是: select * from request where id = 1 and created_at like (today's date); 但使用 Eloquent 。 我试过:
我不确定为什么会收到此代码。基本上我希望能够动态定位我的发射器,但是当我添加一个选项来检查位置并根据需要进行纠正时,我不断收到此错误。 添加的代码是 if (
何时使用语句而不是准备语句。我想语句用于没有参数的查询,但为什么不使用准备好的语句呢?对于没有参数的查询,哪个更快。 最佳答案 I suppose statement is used in queri
我必须创建一个表,如下所示 借款人(客户编号,贷款编号) 如果客户没有超过 3 笔贷款,则可以贷款。 我创建的表如下 create table borrower( customerno int(5),
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicates: Is "else if" faster than "switch() case"? What is the
typescript 版本 2.2.2 我在我的 UserRoutzr.ts 中写了这个要求 const users = require(path.join(process.cwd() + "/da
我有一个用 JPQL 编写的应用程序,它可以命中非常不同的查询(在不同的资源上)。 对于很多此类查询,我需要知道结果总数(计数),因为我没有应用任何 LIMIT/OFFSET 由于此查询的性质非常不同
我对以下 Java 语句感到困惑: ArtClass artClass0 = new ArtClass(); int int3 = 73; boolean boolean0 = artClass0.f
我是一名优秀的程序员,十分优秀!