IT_Programming/Java

Java(JDK) 7 특징

JJun ™ 2009. 11. 26. 09:06

-----------------------------------------------------------------------------------

출처: http://mimul.com/pebble/default/2009/10/06/1254816960000.html#responses

-----------------------------------------------------------------------------------

 

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