首页 > 未分类 > 记录一个可以写骚代码的方式,{{ 双括号语法,没什么卵用

记录一个可以写骚代码的方式,{{ 双括号语法,没什么卵用

平时初始化某个对象的时候,经常要往里边设置很多值。现在可以借助这种骚方式直接在对象创建时加载好。换种初始化模式,换种心情 (雾
比如初始化一个List,可以写成这样。

List list = new ArrayList(){{
    add("1");
    add("a");
    add("666a");
}};
System.out.println(list);//[1, a, 666a]

效果和这种是一样的

List list = new ArrayList();
list.add("1");
list.add("a");
list.add("666a");
System.out.println(list);//[1, a, 666a]

 
其实这效果指不定还好看一点点。
比如有个普通的实体类Person:

package com.skypyb;
public class Person {
    private String name;
    private Integer age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 
我可以使用这种 {{ 双括号形式方便的初始化值。

Person person = new Person(){{
    setAge(18);
    setName("laowang");
}};
System.out.println(person);//Person{name='laowang', age=18}

 
第一层括弧 实际是定义了一个内部匿名类 ,第二层括弧 实际上是一个实例初始化块 (instance initializer block),这个块在内部匿名类构造时被执行。实例初始化块中可以使用其容器范围内的所有方法及变量,而且实例初始化块是在构造器之前运行的。
 
咳咳,在写代码的时候写点这种骚东西还是挺有意思的。return a + b 也可以写成 return a – (-b) 。( 只要不怕被打

           


CAPTCHAis initialing...
EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00