虽然现在开发Android应用时使用Java 8还需要依赖于第三方工具,但是使用Java 7是不需要如此麻烦的。Android Kitkat SDK已经可以支持Java 7的语法了,因此,用这个版本以后的SDK即可以编译包含Java 7语法的代码,下文所有的代码都是在Android Studio IDE下用Kitkat SDK编译。
Java 7的几个语法改善虽然远不如Java 8的影响大,但是也能给开发人员带来一些显而易见的好处,挑几个常用的介绍一下。
二进制字面常量和辅助数字阅读的下划线
使用二进制常量在某此需要处理二进制数据的时候更易于阅读,甚至好于十六进制。同样,使用下划线在数字间进行分隔,也非常易于对代码的阅读。
int anInt = 0b101;
long creditCardNumber = 1234_5678_9012_3456L;
switch语句支持字符串比较
对于需要根据字符串进行多分支处理的情况,再也不用写一组if语句了,现在switch语句已经支持字符串,并且经过编译器优化后性能优于if语句。
public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOfDay; switch (dayOfWeekArg) { case "Monday": typeOfDay = "Start of work week"; break; case "Tuesday": case "Wednesday": case "Thursday": typeOfDay = "Midweek"; break; case "Friday": typeOfDay = "End of work week"; break; case "Saturday": case "Sunday": typeOfDay = "Weekend"; break; default: throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg); } return typeOfDay; }
泛型对象构造时的类型推断
对于泛型对象,在构造时需要同样指定具体类型,比如:
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
在Java 7中,由于使用了类型推断,所以可以写得更简洁:
Map<String, List<String>> myMap = new HashMap();
使用try语句确保资源关闭
资源型对象的关闭是很麻烦的,以前的做法是要在finally块中调用close()方法,现在Java 7提供了更简洁的资源型try语句,可以确保资源被正确的关闭。如:
static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); } }
在一个catch语句中包含多个Exception
老写法:
catch (IOException ex) { logger.log(ex); throw ex; catch (SQLException ex) { logger.log(ex); throw ex; }
新写法:
catch (IOException|SQLException ex) { logger.log(ex); throw ex; }
详细的语法特性请参考http://docs.oracle.com/javase/7/docs/technotes/guides/language/enhancements.html#javase7,希望有更多的Android应用采用Java 7更简洁的语法。