토요일, 9월 26
Shadow

#067 JDK 7

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

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.