В этой статье мы увидим функцию Java10, называемую « Вывод типа локальной переменной», предложенную как часть JEP 286 . С первой версии Java это строго типизированный язык, где нам нужно упомянуть каждый тип данных переменной. Мы все чувствовали, что Java — это многословный язык и ожидали точного и компактного способа написания Java. Java 8 решает эту проблему кое-что.
В Java 10 добавлен вывод типа локальной переменной с инициализатором для устранения многословия. Например,
|
1
2
|
jshell> Map<String,String> map = new HashMap<>();jshell> var map = new HashMap<>(); //This is valid with Java10 |
Здесь тип данных переменной LHS будет определяться в соответствии с RHS-оператором. Например,
|
1
2
3
4
5
6
7
8
9
|
jshell> var i = 3;i ==> 3 //based on RHS, the LHS datatype is int.jshell>int i=3,j=4; //Valid Declarationbut,jshell> var j=4,k=5; //Not a Valid Declaration| Error:|'var' is not allowed in a compound declaration| var j=4,k=5;|^ |
Вы можете использовать эту функцию для расширенного цикла, а также для цикла.
|
1
2
3
4
5
6
7
8
9
|
jshell> List names = Arrays.asList("ABC","123","XYZ");names ==> [ABC, 123, XYZ]jshell> for(var name : names){...> System.out.println("Name = "+ name);...> }Name = ABCName = 123Name = XYZ |
Мы также можем использовать вывод типа локальной переменной в цикле for.
|
01
02
03
04
05
06
07
08
09
10
|
jshell> int[] arr = {1,2,3,4};arr ==> int[4] { 1, 2, 3, 4 }jshell> for (var i=0;i<arr.length;i++){ ...> System.out.println("Value = "+i); ...> }Value = 0Value = 1Value = 2Value = 3 |
В некоторых случаях эта функция недопустима. Например,
- Недопустимо для переменных конструктора
- Недопустимо для переменных экземпляра
- Недействительно для параметров метода
- Недопустимо присваивать значение NULL
- Недопустимо в качестве типа возврата
Давайте посмотрим примеры для приведенных выше утверждений.
|
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
|
jshell> public class Sample { ...> private var name = "xyz"; ...> public Sample(var name) { ...> this.name=name; ...> } ...> public void printName(var name){ ...> System.out.println(name); ...> } ...> public var add(int a, int b) { ...> return a+b; ...> } ...> }| Error:| 'var' is not allowed here| private var name = "xyz"; //Instance variable| ^-^| Error:| 'var' is not allowed here| public Sample(var name) { //Constructor variable| ^-^| Error:| 'var' is not allowed here| public void printName(var name){ //Method parameter| ^-^| Error:| 'var' is not allowed here| public var add(int a, int b) { //Method return type| ^-^ |
|
01
02
03
04
05
06
07
08
09
10
11
|
jshell> public class Sample { ...> ...> public static void main(String[] args) { ...> var s = null; ...> } ...> }| Error:| cannot infer type for local variable s| (variable initializer is 'null')| var s = null;| ^-----------^ |
Когда мы переносим более ранние версии на Java10, нам не нужно беспокоиться о выводе типа локальной переменной, поскольку это имеет обратную совместимость.
В следующем посте мы изучим другую тему. До тех пор, оставайтесь с нами!
| Опубликовано на Java Geeks с разрешения Шивы Джанапати, партнера нашей программы JCG. См. Оригинальную статью здесь: Java 10 — Вывод типа локальной переменной
Мнения, высказанные участниками Java Geeks, являются их собственными. |