В этой статье мы увидим функцию 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 Declaration but, 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 = ABC Name = 123 Name = 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 = 0 Value = 1 Value = 2 Value = 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, являются их собственными. |