1. Improved Type Inference for Generic Instance Creation
– 단순해진 Generics
이전 : Map<String, List<String>> anagrams = new HashMap<String, List<String>>(); JDK7 : Map<String, List<String>> anagrams = new HashMap<>();
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000009.html
2. Language support for collections
– Java 코드의 사이즈를 줄여주고, 가독성을 높여줌
이전 : final List<Integer> piDigits = Collections.unmodifiableList(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 )); JDK7 : final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001193.html
3. Automatic Resource Management
– exception handling을 줄여줌
– C++’s RAII과 C#’s using에 대응하기 위함
이전 : static String readFirstLineFromFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } } JDK7 : static String readFirstLineFromFile2(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path)) { return br.readLine(); } }
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000011.html
4. Added binary integer literals
– Integer Literal에 Binary Integer Literal이 추가됨
BinaryIntegerLiteral: BinaryNumeral IntegerTypeSuffix_opt BinaryNumeral: 0 b BinaryDigits 0 B BinaryDigits BinaryDigits: BinaryDigit BinaryDigit BinaryDigits BinaryDigit: one of 0 1
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000929.html
5. String literals in switch statements
– 스위치문에 문자열 사용 가능
JDK7 : String s = "first"; switch(s) { case "first": processFirst(s); case "second": case "third": processThird(s); break; case "fourth": processFourth(s); default: processDefault(s); break; }
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000001.html
6. Simplified Varargs Method Invocation
– 컴파일 경고에서 메소드 선언 경고로 이동함
이전 : static <T> List<T> asList(T... elements) { ... } static List<Callable<String>> stringFactories() { Callable<String> a, b, c; ... *// Warning: **"uses unchecked or unsafe operations"* return asList(a, b, c); } JDK7 : *// Warning: **"enables unsafe generic array creation"* static <T> List<T> asList(T... elements) { ... } static List<Callable<String>> stringFactories() { Callable<String> a, b, c; ... return asList(a, b, c); }
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000217.html
7. Enhanced null handling
– Null-ignore invocation, Null-safe types
이전 : String str = getStringMayBeNull(); str = (str == null ? "" : str); JDK7 : String str = getStringMayBeNull() ?: "";
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000217.html
8. Enum Comparisons
– Enum에서 range(<, > 등) 연산 가능
이전 : if(rank1.compareTo(rank2) < 0) ... if(rank1.ordinal() < rank2.ordinal()) ... JDK7 : if(rank1 < rank2) ...
9. Chained Invocation
– 체인형식으로 메소드 호출 가능
이전 : DrinkBuilder margarita = new DrinkBuilder(); margarita.add("tequila"); margarita.add("orange liqueur"); margarita.add("lime juice"); margarita.withRocks(); margarita.withSalt(); Drink drink = margarita.drink(); JDK7 : Drink margarita = new DrinkBuilder() .add(“tequila”) .add(“orange liqueur”) .add(“lime juice”) .withRocks() .withSalt() .drink();
10. Extension Methods
– static import 확장
이전 : List list = new ArrayList(); ... Collections.sort(list); list.sort(); JDK7 : import static java.util.Collections.sort; List list = new ArrayList(); ... list.sort();
– 레퍼런스 : http://www.javac.info/ExtensionMethods.html
11. Improved Exception Handling
– 두개이상의 catch문 가능
– catch문에서 rethrow가능
JDK7 : catch multiple exceptions try { return klass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { throw new AssertionError(e); } JDK7 : rethrow exceptions try { doable.doIt(); } catch (final Throwable ex) { logger.log(ex); // surrounding method can declare only checked thrown by doIt() throw ex; }
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000003.html
12. Language support for JSR 292
– 다이나믹 타입 지원(java.dyn.Dynamic)
JDK7 : Dynamic x = (any type of expression can go here); Object y = x.foo("ABC").bar(42).baz();
– 레퍼런스 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001131.html