출처
http://weblogs.java.net/blog/forax/archive/2009/08/29/seven-small-languages-changes-will-be-jdk7
http://blogs.sun.com/darcy/entry/project_coin_final_five
he seven small languages changes that will be in JDK7
Joe Darcy has revealed the changes accepted to be included in JDK7 on coin-dev mailing list
And the final Project Coin changes accepted are:
- Improved Type Inference for Generic Instance Creation (diamond)
- Simplified Varargs Method Invocation
- Strings in switch
- An omnibus proposal for better integral literals
- Automatic Resource Management
- Language support for JSR 292
- Language support for Collections
I think this set of proposal is coherent. Lot of those proposals was already in the starting blocks:
- Diamond is already implemented, see my previous blog entry.
- Simplified varargs is just a matter to add a new warning, so not a big deal.
- String in switch. A little more complex but not that hard.
- Better integral literals, the unsigned syntax need to be explored and implementation will be straighforward.
- ARM block, need to be implemented but the current spec is crystal clear.
- Language support for JSR292, There is already an implementation available in javac.
I hope the JSR292 Expert Group will close the last corner cases during the JVM Summit, in two week.
About Language support for collections, hum, I was a complete surprise for me, knowing that Joe said more than one time than only 5 proposal will live in jdk7.
This proposal is a mix of two proposals:
- Josh Bloch has proposed a syntax pretty clear for collection initialisation and
- Neal Gafter has proposed a translation scheme to implement indexer.
And in my opinion, there are still lot of work on an unified proposal before its inclusion.
The deadline is short, end of October, I think help of the community is needed so if you want to see a better support for collection in Java,
join us on coin-dev list and help to define/implement this feature.
cheers,
Rémi
- forax's blog
- Login or register to post comments
- Printer-friendly version
1. Improved Type Inference for Generic Instance Creation (Diamond)
객체 선언을 이렇게 단순시키는 것을 말한다.
2. Simplified Varargs Method Invocation
(출처) http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000217.html
generic을 추가하면서 너무 타이트하게 waring이 나오는 부분이 있었고, 이런 부분에 대해서 좀 정확치 않은 쪽으로 warning이 나왔는데..
과거
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); }
=> 실제 메소드가 호출된 곳이 아니라 메소드 선언한 곳에서 warning이 찍히도록 하였다.
*// 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); }
=> 또한 이런 부분에 대해서 generic-varagrs 로 해서 warning이 안나오도록 할 수 있다.
*@SuppressWarnings("generic-varargs") // Ensures only values of type T can be stored in elements. * static <T> List<T> asList(T... elements) { ... }
3. Strings in Switch
출처 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000001.html
String s = ... switch(s) { case "foo": processFoo(s); break; }
4. An omnibus proposal for better integral literals
아직 확정되지는 않았고, 아래 두 proposal중에서 고를 것 같다.
Binary literals and Underscores in numbers.
http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000929.html
5. Automatic Resource Management
JDK7으로 가면, 훨씬 개발자가 편하게 개발을 할 수 있고, java io/nio 쪽 api를 쓰면서 stream이나 buffer에 대해서 close() 메소드를 강제로 하지 않아도 될 것 같다.
그리고, 아파치 common의 IOUtils 나 try-catch-finally 안써도 된다.
출처 : http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000011.html
static String readFirstLineFromFile(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
br.close();
}
}
=>JDK 7
try-catch 라는 무조건적 문법에서 try 만 쓸수도 있게 java language spec이 변화되었고, 알아서 내부적으로 resource 관리를 할 수 있게 한다.
static String readFirstLineFromFile2(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
}
또한 이런 코드들도...
InputStream in = new FileInputStream(src);
try {
OutputStream out = new FileOutputStream(dest);
try {
byte[] buf = new byte[8 * 1024];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
} finally {
out.close();
}
} finally {
in.close();
}
}
=>JDK7에서는..
static void copy(String src, String dest) throws IOException {
try (InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest)) {
byte[] buf = new byte[8192];
int n;
while ((n = in.read(buf)) >= 0)
out.write(buf, 0, n);
}
}
6. Language support for JSR 292
일종 동적 클래스가 생겨서, Runtime때 자유롭게 쓸 수 있도록 한 클래스입니다.
http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001131.html
Dynamic x = (any type of expression can go here);
Object y = x.foo("ABC").bar(42).baz();
제가 예전에 한 것들을 적용시킬 수 있다면..
Ant를 돌릴 때, 특정 변수값으로 수정해서 컴파일을 달리하고 싶을 때, ant 컴파일 타임때 클래스를 만들거나 하는 작업들, 일종의 클립보드같은 것들을 여기다사 쑤셔 넣을 수도 있을 것 같군요.
7. Language support for collections
http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/001193.html
불편했던 입력방법이 바뀐다.
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];
8. 기타로는..
Enhanced null handling
기존
public String getPostcode(Person person) {
if (person != null) {
Address address = person.getAddress();
if (address != null) {
return address.getPostcode();
}
}
return null;
}
=> JDK7
return person?.getAddress()?.getPostcode();
}
String str = getStringMayBeNull();
str = (str == null ? “” : str);
=>JDK7
String str = getStringMayBeNull() ?: “”;
Improved catch clause
길게 catch 문없이 or 처럼 쓸 수 있다.
return klass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new AssertionError(e);
}
Comparisons for Enums
enum도 비교가 되게~
boolean isRoyalty(Rank r) {
return rank >= Rank.JACK && rank != Rank.ACE;
}
'java core' 카테고리의 다른 글
Eclipse(JVM) Crash (0) | 2009.12.09 |
---|---|
Cheking JMX Port Alive (0) | 2009.11.19 |
파일 copy 테스트 (nio, inputstream) 테스트 in java (0) | 2009.09.11 |
Java Memroy Model (0) | 2009.08.06 |
Java Pattern 활용하기 (0) | 2009.07.23 |