【lombok】var - 无忧的局部变量

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/amoscn/article/details/86517113

可变局部变量var

var的工作原理与val完全相同,但局部变量不会标记为final。

该类型仍然推断至初始化表达式,并且任何重新的赋值都是合法的(因为变量不再是final类型),但不会再查找以确定适当的类型(我个人的理解是: 已推导出某个类型,虽然又重新赋值,但不会再重新推导出另一个合适类型)。

例如,var x =“Hello”; x = Color.RED; 不起作用; x的类型将被推断为java.lang.String,因此,x = Color.RED赋值将失败。 如果x的类型被推断为java.lang.Object,则此代码将被编译,但这不是var的工作方式。

一般情况下我们申明类型,总是需要这么写

        //  列表
        ArrayList<String> example = new ArrayList<>();
        //  map
        Map<String, Integer> map = new HashMap<>(12);
        //  java对象
        JavaBean bean = new JavaBean();

但是,有了var, 我们不再需要这么麻烦!
先引入maven坐标

   <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <version>1.18.4</version>
       <scope>provided</scope>
   </dependency>

代码示例:

package com.amos;

import lombok.var;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.stream.Stream;

/**
 * @author amos
 */
public class VarExample {

    public void example1() {
        //  var ->  List<String>
        var example = new ArrayList<String>();
        example.add("Hello, World!");
        //  var ->  String
        var foo = example.get(0);
        System.out.println(foo.toLowerCase());
    }

    public void example2() {
        // var ->  Map<Integer, String>
        var map = new HashMap<Integer, String>();
        map.put(0, "zero");
        map.put(5, "five");
        // var ->  Map.Entry<Integer, String>
        for (var entry : map.entrySet()) {
            System.out.printf("%d: %s\n", entry.getKey(), entry.getValue());
        }
    }

    public void example3() {
        // var ->  Person
        var person = new Person();
        person.setName("amos");
        person.setAge(22);
        System.out.println(person);
    }

    public void example4() {
        // var ->  Integer[]
        var integers = new Integer[]{
                1 , 2 , 3
        };
        // var ->  Integer
        int num = 2;
        Integer foundNum = Stream.of(integers).filter(s -> s.equals(num)).findAny().orElse(0);
        System.out.println(foundNum);

    }

    public static class Person {
        private String name;
        private int age;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}

不可用

不可用于java类的属性(field)

public class example{
  var abc  = "hello world";
}

不可用于指定方法的入参类型

public class example{
  public void fun(var xyz){
     //  bala bala 
 }
}

猜你喜欢

转载自blog.csdn.net/amoscn/article/details/86517113