Java 10 не за горами, а RC Build доступен здесь . Функции, предназначенные для этого выпуска, можно найти здесь . Из всех JEP, предназначенных для Java 10, наиболее интересным и наиболее обсуждаемым сообществом разработчиков является 286: Вывод типа локальной переменной .
Что такое вывод типа локальной переменной?
Мы видели в Java 8 , оператор Diamond, который позволил нам написать
1
|
List<Map data = new ArrayList<Map(); |
в виде
1
|
List<Map data = new ArrayList(); |
где тип на RHS был выведен на основе типа на LHS. Это работало, хотя и в анонимных внутренних классах, что было исправлено в Java 9.
Java 10 идет дальше и говорит следующее:
1
|
List<Map data = new ArrayList(); |
можно записать как:
1
|
var data = new ArrayList(); |
Вывод типа локальной переменной позволяет разработчику пропустить объявление типа, связанное с локальными переменными (определенными в определениях методов, блоках инициализации, циклах for и других блоках, таких как if-else), и тип выводится JDK.
Где это можно использовать?
Позвольте мне создать пример класса, чтобы показать различные способы использования локального вывода переменных var
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
public class LegalLocalVarInferenceDemo{ //in a static/instance initialization block static { var anotherName = "Sanaulla" ; System.out.println( "Hello, " + anotherName); } public static void main(String[] args){ //as a local variable var name = "Mohamed Sanualla" ; System.out.println( "Hello " + name); var data = new ArrayList(); data.add(Map.of( "key1" , "value1" , "key2" , "value2" )); data.add(Map.of( "key11" , "value11" , "key22" , "value22" )); data.add( "hello" ); System.out.println(data); System.out.println( "********** As iteration variable in enhanced for-loop ***************" ); for ( var object : data){ System.out.println(String.format( "%s of type %s" , object, object.getClass().getName())); } System.out.println( "********** As looping index in for-loop ***************" ); for ( var i = 0 ; i < data.size(); i++ ){ var object = data.get(i); System.out.println(String.format( "%s of type %s" , object, object.getClass().getName())); } System.out.println( "********** As a return value from another method ***************" ); var anInteger = someAnotherMethod(); System.out.println( "someAnotherMethod returned " + anInteger); } //As a return value in a method public static Integer someAnotherMethod(){ System.out.println( "someAnotherMethod called" ); var returnObj = 12 ; return returnObj; } } |
Где это нельзя использовать?
Позвольте мне создать еще один пример класса, который показывает, как нельзя использовать var
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class IllegalLocalVarInferenceDemo{ //Not permitted in class fields //var someProperty; //Not allowed as parameter for constructor // public LocalVarInferenceDemo(var param1){ // } public static void main(String[] args){ //Not allowed in catch parameter // try{ // //some operations // }catch(var ex){ // } } //Not permitted below //public static void someMethod(var param1, var param2){ // System.out.println("Some method called"); //} //Not permitted in method return type // public static var someAnotherMethod2(){ // System.out.println("someAnotherMethod called"); // var returnObj = 12; // return returnObj; // } } |
Образец кода
Этот образец можно найти на GitHub
Опубликовано на Java Code Geeks с разрешения Мохамеда Санауллы, партнера нашей программы JCG . См. Оригинальную статью здесь: Java 10 — JEP 286: Вывод типа локальной переменной
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |