论Java8中switch(String)的解决方案真实性

今天在浏览博客的时候,看到一篇关于"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版本,这样会得不偿失。好了,博主要开始工作了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谦蓦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值