版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
今天在浏览博客的时候,看到一篇关于"java8中switch(String)的错误解决"的博文。具体问题是说jdk1.7支持switch(String),但是在jdk1.8中却不行,就此提出的解决方案。然而,针对jdk1.8,已经使用过一年之久的博主存在一个困惑,平时开发项目jdk1.8也有用到过switch(String),但是并未发现过此问题,想来jdk通常都是向前兼容的,不该出现此问题啊。难道我遇到是个假jdk1.8?于是就此进行了代码验证。
jdk版本以及jre版本:
代码一:
-
package com.jangz.syntax.nosupport;
-
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
public
class ValidateUtil {
-
-
private
static
final Logger log = LoggerFactory.getLogger(ValidateUtil.class);
-
-
private boolean checkName(String fileName, String name, String op) {
-
switch(op) {
-
case
"no":
-
return
false;
-
case
"contains":
-
return fileName.contains(name) ?
true :
false;
-
case
"equals":
-
return fileName.equals(name)?
true :
false;
-
case
"noequal":
-
return fileName.equals(name) ?
false :
true;
-
default:
-
log.info(
"wrong op:{}", op);
-
break;
-
}
-
return
false;
-
}
-
-
public static void main(String[] args) {
-
String FILE_NAME =
"/usr/local/share/applications/doc.txt";
-
String NAME =
"usr/local/";
-
boolean result =
new ValidateUtil().checkName(FILE_NAME, NAME,
"contains");
-
System.out.println(
"ValidateUtil result: " + result);
-
}
-
}
测试结果如下:
结果显示,jdk1.8直接使用switch(String)并没有问题。
代码二:
-
package com.jangz.syntax.nosupport;
-
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
-
enum op {
-
no, contains, equals, noequal
-
}
-
-
public
class ValidateUtilCor {
-
-
private
static
final Logger log = LoggerFactory.getLogger(ValidateUtilCor.class);
-
-
private boolean checkName(String fileName, String name, op p) {
-
switch (p) {
-
case no:
-
return
true;
-
case contains:
-
return fileName.contains(name) ?
true :
false;
-
case equals:
-
return fileName.equals(name) ?
true :
false;
-
case noequal:
-
return fileName.equals(name) ?
false :
true;
-
default:
-
log.info(
"wrong op:{}", p);
-
break;
-
}
-
return
false;
-
}
-
-
public static void main(String[] args) {
-
String FILE_NAME =
"/usr/local/share/applications/doc.txt";
-
String NAME =
"usr/local/";
-
boolean result =
new ValidateUtilCor().checkName(FILE_NAME, NAME, op.contains);
-
System.out.println(
"ValidateUtilCor result: " + result);
-
}
-
-
}
测试结果如下:
综上,jdk1.8是支持switch(String)的啊?!什么鬼?于是博主又去看了下发表该博文的日期,稍加思索,觉得应该是jdk1.8在后期的新版本中进行了修改调整吧。
不论如何,以后开发项目过程中,如果各位使用的是jdk1.8,那么可以放心使用switch(String),当然,如果也出现同样问题——jdk1.8不支持switch(String),则可以通过代码二的枚举形式进行替代解决。切不可为了使用一个语法糖就选择临时更换jdk版本,这样会得不偿失。好了,博主要开始工作了!