记录一个可以写骚代码的方式,{{ 双括号语法,没什么卵用
平时初始化某个对象的时候,经常要往里边设置很多值。现在可以借助这种骚方式直接在对象创建时加载好。换种初始化模式,换种心情 (雾
比如初始化一个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) 。( 只要不怕被打