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, являются их собственными. |