JSR-334 посвящен небольшим улучшениям языка Java, которые реализованы в JDK 7
- В числовых литералах группы цифр теперь можно разделить подчеркиванием:
public final static int INT_WITH_UNDERSCORES = 100_000;
- Добавлены бинарные литералы с префиксом 0b:
public final static int BINARY_INT = 0b001100;
- В качестве ключа switch теперь можно применять тип String:
switch("one") {
case "one" :
case "two" : System.out.println("JSR 334");
} - Теперь можно не повторять определение типа при создании объекта generic класса:
List<String> foo = new ArrayList<>();
- В блоке catch можно перечислить несколько классов исключений:
try {
throw new NullPointerException();
} catch (ArithmeticException | NullPointerException e) {
} - UPD Для целей проверки синтаксиса используется наименьший общий тип перечисленных исключений:
try {
throw new NullPointerException();
} catch (NullPointerException | ArithmeticException e) {
// Будет ошибка компиляции
// ArithmeticException a = e;
// Общий тип
RuntimeException r = e;
} - Добавлены автоматически закрывающиеся после выполнения блока try ресурсы, которые должны реализовывать интерфейс java.lang.AutoCloseable:
class Resource implements AutoCloseable {
@Override
public void close() throws Exception {}
} - Конструкция try с автоматически закрывающимся ресурсом может быть без catch и finally:
try (Resource resource = new Resource()) {
throw new Exception();
} - В методах и конструкторах, использующих переменное число аргументов переменного типа теперь будет выдаваться предупреждение unchecked or unsafe operation, если они не аннотированы SafeVarargs. Аннотировать можно конструкторы, final и static методы:
class Coin<T> {
@SafeVarargs
public Coin(T ... args){
}
@SafeVarargs
public final void instanceMethod(T ... args){
}
@SafeVarargs
public static void staticMethod(K ... args){
}
}