C, PHP, VB, .NET

Дневникът на Филип Петров


* Четири нововъведения от Java 7

Публикувано на 21 ноември 2011 в раздел ПИК3 Java.

В един от последните примери, които пуснах в сайта, получих уместен коментар, в който се каза, че „Eclipse иска int или enum, a ние подаваме String“ при използване на оператор „switch“. Объркването се получава поради това, че подаването на String към оператор switch е едно от нововъведенията в Java 7!

Естествено нововъведенията са много повече, но на този етап ще акцентирам върху четири от основните:

1. String като параметър на „switch“:

Вече е възможно да правите:

String str=...;
...
switch(str){
   case "...":
        ...
}

Мисля, че не е нужно да го коментирам подробно. Еквивалентно е на поредица от „if-else-if-else“ команди, при които във всеки „if“ се извиква оператор „equals“ на обекта от тип String.

2. Инстанции на обекти с тип по подразбиране:

Досега пишехме (а аз продължавам да пиша по навик) следното:

LinkedList<String> list = new LinkedList<String>();

Вече няма нужда да подавате типа на обектите в списъците от дясната страна. Тоест горното ще е еквивалентно на:

LinkedList<String> list = new LinkedList<>();

3. Няколко изключения в един catch блок:

Когато в един try блок могат да се генерират различни изключения ние пишехме по един catch блок за всяко, например:

try{
   ...
}
catch(ArrayOutOfBoundsException e){
   ...
}
catch(IOException e){
   ...
}

А сега можем да правим следното:

try{
   FileReader f = new FileReader("file.txt");
   ...
}
catch(ArrayOutOfBoundsException | IOException e){
   ...
}

4. Заделяне на ресурси за try блок:

На последно тук, но според мен първо по значение е заделянето на ресурси за try блок, които автоматично се освобождават при неговото затваряне. Разгледайте например това:

FileReader in = null;
try{
   in = new FileReader("file.txt");
   ...
}
catch(IOException e){
   ...
}
finally{
   try{
      if(in!=null) in.close()
   }
   catch(IOException e){
      ...
   }
}

Това, което се правеше във finally блока изглеждаше много „паразитно“ и не без основание. В новия си синтаксис в Java 7 можем да напишем много по-компактен код:

try(FileReader in = new FileReader("File.txt")){
   ...
}
catch(IOException e){
   ...
}

Така заделеният ресурс ще бъде затворен автоматично след излизане от try блока, независимо дали е генерирано изключение или не.

Приятно програмиране.

 



5 коментара


  1. Десислав Андреев каза:

    Супер…много удовлетворително обяснение :)

  2. Ще можеш да се явиш през септември.

  3. Anonymous каза:

    Искам да Ви попитам колко официални дати за изпит е имало по пик 3 през годината?Или по друг начин казано,ако съм се явил на контролното,което беше за освобождаване от изпита(проведено по време на упражненията),на редовното контролно и на поправката през зимната поправителна сесия имам ли право да се явя на изпит по време на ликвидационната сесия в края на септември?

  4. Anonymous каза:

    Благодаря за бързия отговор.Весело лято

  5. Валентин Гелински каза:

    Искам да допълня и още една новост – разделянето на числата с подчертавка (_), т.е. можем да пишем 1_234_567_890 вместо 1234567890. Личено за мен първият вариант е доста по-четим.(Наистина ако спазваме конвенция подобни лайна ще ги има само на едно място- където инициалзираме константите, но все пак нововъденеето ме кефи). Жалко че не всички framework-ци поддържат java 7, та досега само по един от проектите по които съм работил съм имал щастето да програмирам на java7. Обратният преход (6->7) е доста досаден.

Добави коментар

Адресът на електронната поща няма да се публикува


*