第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

SpringBoot之路(9)–使用Lombok簡(jiǎn)化開(kāi)發(fā)同時(shí)注意躲坑

標(biāo)簽:
SpringBoot

场景

都说咧,Spring Boot就是为简化Spring开发而生,Boot么,快速启动,哪里不够快,就干倒它!这不是口号,Spring Boot就是这么干哩。

那现在仔细瞅瞅,我们的项目还有什么重复代码?毫无技术含量,都是简单的逻辑重复。看看我们的数据对象DO

/**
 * 博客类
 */
public class BlogDo {
	/**
	 * 序号
	 */
	private Long id;
	/**
	 * 标题
	 */
	private String title;
	/**
	 * 内容
	 */
	private String content;

	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
}

有没有发现get/set方法,完全是固定模式的,只要属性名确定了,方法怎么写也就确定了。

而且我们平时写的时候,一般也不用自己手写,直接利用开发工具生成就行。既然是模板代码,何必浪费手工生成的时间。

使用Lombok,即可帮我们自动生成get/set模板代码,而且它还能做到更多!

安装Lombok

首先下载lombok jar包,点此打开下载页

点击图中jar下载即可
图片描述
下载之后双击打开,点击Specify Location然后选择eclipse安装目录下的eclipse.exe,然后点击Install即可。
注意安装完了需要重启下eclipse。
图片描述

引入Lombok

安装完了还需要引入Lombok,哈哈,针对开发工具安装一次就够了,然后每个项目需要单独引入lombok依赖,如下所示,注意无须指定版本,因为SpringBoot2.2.5已经有默认关联的lombok版本了,当然你手工指定也OK。

		<!-- 添加lombok相关功能 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<scope>provided</scope>
		</dependency>

看看Lombok实现了啥功能

看注释,get/set/toString/equals/hashCode这些常用的都给我们生成了,简直太方便了!

/**
 * 博客类
 */
@Data // 通过@Data注解为该类启用Lombok功能
public class BlogDo {
	/**
	 * 序号
	 */
	private Long id;
	/**
	 * 标题
	 */
	private String title;
	/**
	 * 内容
	 */
	private String content;

	/**
	 * 测试入口
	 */
	public static void main(String[] args) {
		BlogDo blog = new BlogDo();
		// 自动生成了set方法
		blog.setId(1L);
		blog.setTitle("测试博客");
		blog.setContent("测试内容");
		// 自动生成了get方法
		System.out.println(blog.getId());
		System.out.println(blog.getTitle());
		System.out.println(blog.getContent());
		// 自动生成了toString(),打印所有属性
		System.out.println(blog);
		// 自动生成了equals方法
		BlogDo otherBlog = new BlogDo();
		otherBlog.setId(1L);
		otherBlog.setTitle("测试博客");
		otherBlog.setContent("测试内容");
		System.out.println(blog.equals(otherBlog));// 输出true,生成的equals判断所有属性相同

		// 自动生成hashCode方法
		System.out.println(blog.hashCode());// 输出577081312
		System.out.println(otherBlog.hashCode());// 输出577081312

		// 测试往set中添加数据
		Set<BlogDo> set = new HashSet<BlogDo>();
		System.out.println(set.add(blog));// 输出true
		System.out.println(set.add(otherBlog));// 输出false
	}
}

Lombok有什么坑么

在继承时,Lombok自动生成的toString、equals、hashCode方法默认会忽略父类的不同,其实这一点挺坑的,看例子。

/*
 * 父类-动物
 */
@Data
public class Animal {
	private String type;
}
/**
 * 子类-人类,人类也是哺乳动物的一种
 */
@Data
public class Human extends Animal{
	private String name;
	/**
	 * 测试
	 */
	public static void main(String[] args) {
		Human h1=new Human();
		h1.setType("猿人");
		h1.setName("老陈");
		Human h2=new Human();
		h2.setType("新人类");
		h2.setName("老陈");
		
		System.out.println(h1.toString());//输出:Human(name=老陈),可见直接忽略了父类
		System.out.println(h1.equals(h2));//输出:true,判断相等也不看父类,其实这个不符合我们正常思维的
		System.out.println(h1.hashCode()==h2.hashCode());//输出true,也不看父类情况
	}
}

其实默认应该是将父类的参数纳入计算,这样才符合我们正常思维,默认思维。

但是也能解决,添加以下两个注解,就能将父类内容纳入计算了

@ToString(callSuper = true)//让父类参与到计算
@EqualsAndHashCode(callSuper = true)//让父类参与到计算

我们纳入注解以后看下情况:

/**
 * 子类-人类,人类也是哺乳动物的一种
 */
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class Human extends Animal{
	private String name;
	/**
	 * 测试
	 */
	public static void main(String[] args) {
		Human h1=new Human();
		h1.setType("猿人");
		h1.setName("老陈");
		Human h2=new Human();
		h2.setType("新人类");
		h2.setName("老陈");
		
		System.out.println(h1.toString());//输出:Human(super=Animal(type=猿人), name=老陈)
		System.out.println(h1.equals(h2));//输出:false,父类参与判断了
		System.out.println(h1.hashCode()==h2.hashCode());//输出false,父类参数参与计算了
	}
}

总结

Lombok还是要用的,需要稍微注意一下使用中的问题就行。

另外equals和hashCode默认会让所有的属性参与计算,实际我们在写项目中,可能只用一个id计算。那就需要重写equals和hashCode方法。

一些童鞋不喜欢写hashCode,这是不对的哦,因为hashCode不光有助于快速查找,还影响相等的判断,所以不写hashCode可能直接导致判断失败!

一些散列集合如HashMap/HashSet,会先看hashCode是否相等,hashCode不等则直接认定不相等了,根本不会给equals机会。

所以记住:凡是重写equals,必须要重写hashCode!

最后今天是周日,祝大家周日哈皮!

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消