Update: Eclipse Indigo 3.7.1 now has built-in support for Java 7. The post below only applies to Eclipse Indigo versions below 3.7.1.
Here are the steps needed to start playing with the new Java 7 language changes (aka Project Coin) in Eclipse Indigo.
1. Download and install Java SE 7 JDK. The JDK installer also comes with the JRE installer.
2. A few days ago, you needed the Eclipse Java Development Tools Patch for Java 7 Support (BETA). from the Eclipse update site http://build.eclipse.org/eclipse/java7patch/. This is no longer available and developers have to download a maintenance build. Download the latest version of Eclipse 3.7 from the 3.7.x Stream Builds section. You now should be able to use the Java 7 compiler. Also verify the Installed JREs in Eclipse.
3. Create a new project using the Java 7 compiler and library.
4. Read Project Coin to know more about the language changes introduced in Java 7.
5. Create a new class to try out the language changes in Eclipse. Try the code below.
package com.teamextension.java7;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ProjectCoin {
public static void main(String[] args) throws Exception1, Exception2 {
stringInSwitch();
numericLiterals();
diamond();
tryWithResources();
multiCatch();
preciseRethrow();
simplifiedVarArgs();
}
private static void stringInSwitch() {
switch ("apple") {
case "apple":
System.out.println("cider");
}
}
private static void numericLiterals() {
System.out.println(1_000_000);
System.out.println(0b1000);
}
private static void diamond() {
List<String> list = new ArrayList<>();
}
private static void tryWithResources() {
try (BufferedReader br = new BufferedReader(new FileReader("README.txt"))) {
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
// no more finally
}
private static class Exception1 extends Exception {
}
private static class Exception2 extends Exception {
}
private static void multiCatch() {
try {
if (true) {
throw new Exception1();
} else {
throw new Exception2();
}
} catch (Exception1 | Exception2 e) {
e.printStackTrace();
}
}
private static void preciseRethrow() throws Exception1, Exception2 {
try {
if (true) {
throw new Exception1();
} else {
throw new Exception2();
}
} catch (Exception e) {
throw e; // notice Exception1 and Exception2 in the throws clause
}
}
private static void simplifiedVarArgs() {
// See http://download.oracle.com/javase/tutorial/java/generics/non-reifiable-varargs-type.html
List<String> list = null;
asList(list);
}
@SafeVarargs
private static <T> List<T> asList(T... elements) {
// Type safety: Potential heap pollution via varargs parameter elements
return null;
}
}
The code is self explanatory, and includes some comments about the not so obvious parts of the code. What requires further reading is the Simplified varargs method invocation. I suggest you read Using Non-Reifiable Parameters with Varargs Methods for more information.


