java12关键字var_Java 10:“ var”关键字
java12關(guān)鍵字var
Java 10使用關(guān)鍵字var引入了局部變量類型推斷 。 這意味著無需編寫:
Map<Department, List<Employee>> map = new HashMap<>(); // ... for (Entry<Department, List<Employee>> dept : map.entrySet()) {List<Employee> employees = dept.getValue();// ... }您可以使用var減少樣板,如下所示:
var map = new HashMap<Department, Employee>(); // ... for (var dept : map.entrySet()) {var employees = dept.getValue();// ... }var消除了在代碼中編寫顯式類型的需要。 這不僅減少了重復(fù),而且還使您的代碼更易于維護(hù),因?yàn)槔?#xff0c;如果您決定將來更改存儲在地圖中的對象的類型,則只需要更改一行代碼即可。
多態(tài)性:
現(xiàn)在讓我們看一下var在多態(tài)代碼中的行為。 例如,如果您有一個Shape類,其中包含兩個子類Square和Circle ,則使用var v = new Circle()會推斷出什么類型? 讓我們在JShell中嘗試一下:
jshell> var v = new Circle(); v ==> Circle@4e9ba398jshell> v.getClass(); $13 ==> class Circlejshell> v = new Square(); | Error: | incompatible types: Square cannot be converted to Circle | v = new Square(); | ^----------^如上所示, v屬于Circle類型,如果您嘗試將其重新分配給Square ,則編譯器將引發(fā)錯誤。
匿名類:
使用var可以做的令人興奮的事情之一就是創(chuàng)建匿名類并引用其中的字段! 例如:
var person = new Object() {String name = "Joe";int age = 10; }; System.out.println(person.name + ":" + person.age);var推斷出匿名類的類型,這意味著您可以將匿名類用作中間值的“持有人”,而無需創(chuàng)建和維護(hù)新類。 這是另一個示例,顯示了如何創(chuàng)建“臨時”人對象:
var persons = Stream.of("Alice", "Bob", "Charles").map(s -> new Object() {String name = s;int age = 10;}).collect(toList()); persons.forEach(p -> System.out.println(p.name));其他注意事項(xiàng):
如果沒有顯式初始化(??分配為null )或在lambda表達(dá)式中,則無法使用var :
jshell> var v; | Error: | cannot infer type for local variable v | (cannot use 'var' on variable without initializer) | var v; | ^----^jshell> var v = null; | Error: | cannot infer type for local variable v | (variable initializer is 'null') | var v = null; | ^-----------^jshell> var v = () -> {} | Error: | cannot infer type for local variable v | (lambda expression needs an explicit target-type) | var v = () -> {}; | ^---------------^翻譯自: https://www.javacodegeeks.com/2018/05/java-10-the-var-keyword.html
java12關(guān)鍵字var
總結(jié)
以上是生活随笔為你收集整理的java12关键字var_Java 10:“ var”关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑要想不变卡如何使电脑不卡
- 下一篇: java serial_Java的@Se