我们知道java1.8出了很多新特性,可以让我们的开发代码变得骚(优)气(雅)蓬(简)勃(洁)起来,比如说我们现在已经熟知的lombalabala表达式和stream流
比如说lombalabala表达式的基础语法 小箭头 “->”,将其分为参数列表(左侧)和执行函数体两部分,即使得代码简洁不少,也提高了代码的可读性。
当然还有其他方面的一些改进,
比如说我们新建一个对象类,搞一大堆字段
一般来讲我们需要写一些构造方法,geter,seter,toString,hashcode什么的方法,虽然编译器给我们提供了特别方便的 alt+insert 快速构建方法,但是呢,我们快速的创建好这一套流程下来 我们的entity文件变成了什么呢?
是的,它变成了一米七的糙汉子。。。
为了让我们的类一直保持mini可爱,我们引入了lombok的注解@Data
一个注解解决一切难题
从官方文档上可以看出@Data 注解其实是一个全家桶套餐,其中包含了@ToString,@EqualsAndHashCode和@Getter/@Setter以及 @RequiredArgsConstructor
所以才如此强大,一个注解就省了我们一百多行代码。
这是我的一个父类
这是我的一个继承类
下面我们猜测一下 最终输出的是false呢还是ture呢?
答案是
为啥我的mate20和P30竟然是一样的呢!!
这就是@Data注解的一个小心机啦,我们知道上面说它集合了@EqualsAndHashCode这个注解,在官网中对这个注解做了说明:官网全是英文,我吃力的点了翻译一下
大概意思是说,此注解会生成equals(Object other) 和 hashCode()方法,但是如果是应用到扩展类上的时候,问题就会棘手起来,因为它默认只使用该类中定义的属性且不调用父类的方法。但是我们可以用callSuper=true来解决这种问题,来显示的告诉代码我要调用父类的方法。
我们试一下:
现在是false啦!
那么为什么要有这种默认不考虑父类的设定呢?
当我再次尝试的时候发生了一点现象可能会给我一些启发:
因为再往上追寻父类就是Object啦!跟Object爸爸谈条件是没有意义的…