当前位置: 首页 > news >正文

网站如何做静态化/重庆森林讲的什么内容

网站如何做静态化,重庆森林讲的什么内容,建设国外网站引流吗,全栈网站开发者文章目录简介原理安装常用Getter、SetterToStringEqualsAndHashCodeNonNullNoArgsConstructor、RequiredArgsConstructor、AllArgsConstructorDATABuilderLogvalCleanup简介 Project Lombok is a java library that automatically plugs into your editor and build tools, spi…

文章目录

    • 简介
    • 原理
    • 安装
    • 常用
      • @Getter、@Setter
      • @ToString
      • @EqualsAndHashCode
      • @NonNull
      • @NoArgsConstructor、@RequiredArgsConstructor、@AllArgsConstructor
      • @DATA
      • @Builder
      • @Log
      • val
      • @Cleanup

简介

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.

通过注解帮助开发人员消除Java中的冗长代码(简单的Java对象)

原理

JSR 269:插件化注解处理API

javac编译阶段给被注解的类加上对应的方法

Annotation_Processing
Lmobok_Annotation_Processor处理
AST语法树解析开始
AST语法树修改
Lombok_Annotation_Handler
开始
解析并转换为Java源文件
AST语法树修改完成
分析并生成字节码Class文件
结束

安装

使用

  • javac

    • 拷贝jar到类路径
    • javac -cp lombok.jar [待编译的包]
  • Maven

    • 引入依赖

      <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version><scope>compile</scope>
      </dependency>
      
  • Intelllij IDEA

    • 安装Lombok插件
      • Go to File>Settins>Plugins
      • Clik on Browse repositories
      • Seach for Lombok Plugin
      • Clik on Install plugin
      • Restart Intellij IDEA

常用

  1. @Getter/@Setter
  2. @ToString
  3. @EqualsAndHashCode
  4. @NonNull
  5. @NoArgsConstructor,@RequiredArgsConstructor,@AllArgsConstruor
  6. @Data
  7. @Builder
  8. @Log
  9. val
  10. @Cleanup

@Getter、@Setter

可以用于类和成员变量上

@Getter //public,默认值
@Getter(AccessLeavel.PUBLIC) //public
@Getter(AccessLeavel.PROTECTED) //protected
@Getter(AccessLeavel.NONE) //不生成Getter方法

@Setter //public,默认值

//对被static修饰的变量不产生效果
//对被final修饰的变量只产生getter方法,不产生setter方法

@Getter
@Setter
public class User {private String userName;private Integer age;
}//编译后
public class User {private String userName;private Integer age;public User() {}public String getUserName() {return this.userName;}public Integer getAge() {return this.age;}public void setUserName(String userName) {this.userName = userName;}public void setAge(Integer age) {this.age = age;}
}
@Getter(AccessLevel.PRIVATE)
@Setter(AccessLevel.PROTECTED)
public class User {@Getter(AccessLevel.NONE)private String userName;@Setter(AccessLevel.NONE)private Integer age;
}//编译后
public class User {private String userName;private Integer age;public User() {}private Integer getAge() {return this.age;}protected void setUserName(String userName) {this.userName = userName;}
}
@Getter
@Setter(AccessLevel.PUBLIC)
public class User {private final String userName="";private static Integer age;
}//编译后
public class User {private final String userName = "";private static Integer age;public User() {}public String getUserName() {this.getClass();return "";}
}

@ToString

//仅支持添加到类上
@ToString	//默认不排除任何字段
@ToString(exclude={"email","password"})	//排除email和password
@ToString(of={"userName","age"});	//只输出userName和password字段
@ToString
public class User {private String userName;private Integer age;
}//编译后
public class User {private String userName;private Integer age;public User() {}public String toString() {return "User(userName=" + this.userName + ", age=" + this.age + ")";}
}
@ToString(of = {"userName"},exclude = {"userName"})
public class User {private String userName;private Integer age;
}//编译后
public class User {private String userName;private Integer age;public User() {}public String toString() {return "User(userName=" + this.userName + ")";}
}

@EqualsAndHashCode

boolean equals(Object);	//判断对象是否相等
boolean canEqual(Object);	//判断对象是不是该类的一个实例
int hashCode();	//计算对象的hash值@EqualsAndHashCode(excelude={"phone","password"})	//排除phone、password字段
@EqualsAndHashCode(of={"userName","passwd"})	//仅判断userName与passwd属性
@EqualsAndHashCode
public class User {private String userName;private Integer age;
}//编译后
public class User {private String userName;private Integer age;public User() {}public boolean equals(Object o) {if (o == this) {return true;} else if (!(o instanceof User)) {return false;} else {User other = (User)o;if (!other.canEqual(this)) {return false;} else {Object this$userName = this.userName;Object other$userName = other.userName;if (this$userName == null) {if (other$userName != null) {return false;}} else if (!this$userName.equals(other$userName)) {return false;}Object this$age = this.age;Object other$age = other.age;if (this$age == null) {if (other$age != null) {return false;}} else if (!this$age.equals(other$age)) {return false;}return true;}}}protected boolean canEqual(Object other) {return other instanceof User;}public int hashCode() {int PRIME = true;int result = 1;Object $userName = this.userName;result = result * 59 + ($userName == null ? 43 : $userName.hashCode());Object $age = this.age;result = result * 59 + ($age == null ? 43 : $age.hashCode());return result;}
}

@NonNull

//可以用于实参与属性值
public void test(@NonNll String s){//方法体
}//test()编译后
public void testj(@NonNull String s){if(s==null){throw new NullPonintException("s is marked non-null but is null");}else{//方法体}
}//调用时
mian(){test(null);	//当传入的值为空时,会报出异常
}@NonNull
private String id;	//调用时若id为空,会抛出异常

@NoArgsConstructor、@RequiredArgsConstructor、@AllArgsConstructor

@NoArgsConstructor	//无参构造器
@RequiredArgsConstructor	//自定义构造器,生成带有标记为@NonNull和无初始值的final的属性的构造器
@AllArgsConstructor	//带有所有属性的构造器

@DATA

/*
集成了以下4个注解
@Getter/@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
*/
@Data
public class User {private String userName;private Integer age;
}//编译后
public class User {private String userName;private Integer age;public User() {}public String getUserName() {return this.userName;}public Integer getAge() {return this.age;}public void setUserName(String userName) {this.userName = userName;}public void setAge(Integer age) {this.age = age;}public boolean equals(Object o) {if (o == this) {return true;} else if (!(o instanceof User)) {return false;} else {User other = (User)o;if (!other.canEqual(this)) {return false;} else {Object this$userName = this.getUserName();Object other$userName = other.getUserName();if (this$userName == null) {if (other$userName != null) {return false;}} else if (!this$userName.equals(other$userName)) {return false;}Object this$age = this.getAge();Object other$age = other.getAge();if (this$age == null) {if (other$age != null) {return false;}} else if (!this$age.equals(other$age)) {return false;}return true;}}}protected boolean canEqual(Object other) {return other instanceof User;}public int hashCode() {int PRIME = true;int result = 1;Object $userName = this.getUserName();result = result * 59 + ($userName == null ? 43 : $userName.hashCode());Object $age = this.getAge();result = result * 59 + ($age == null ? 43 : $age.hashCode());return result;}public String toString() {return "User(userName=" + this.getUserName() + ", age=" + this.getAge() + ")";}
}

@Builder

//生成一个内部类
public class User{UserBuilder(){final String userName;final int age;UserBuilder();	//无参构造UserBuilder userName(String userName)	//设置userName的值UserBuilder age(int age)	//设置age}private String userName;private int age;UserBuilder builder()
}//调用,链式编程
main(){User user = User.bulder().userName("joey").age(18).build();
}
@Builder
public class User {private String userName;private Integer age;
}//编译后
public class User {private String userName;private Integer age;User(String userName, Integer age) {this.userName = userName;this.age = age;}public static UserBuilder builder() {return new UserBuilder();}public static class UserBuilder {private String userName;private Integer age;UserBuilder() {}public UserBuilder userName(String userName) {this.userName = userName;return this;}public UserBuilder age(Integer age) {this.age = age;return this;}public User build() {return new User(this.userName, this.age);}public String toString() {return "User.UserBuilder(userName=" + this.userName + ", age=" + this.age + ")";}}
}

@Log

@Log	
//调用log.info(Stirng)//

val

val map = new HashMap<String,String>();
//map不限制类型,在编译时确定map的类

@Cleanup

//使用Cleanup之前
InputStream in = null;
OutputStream out = null;
try{in = new FileInputStream("filepath");out = new FileoutputStream("path");byte[] b = new byte[1000];while(true){int r = in.read(b);if(r == -1) break;out.write(b,0,r);}
}finally{if(in != null){in.close();}if(out != null){out.close();}
}
//使用@Cleanup后
//可以省去关闭流的操作
@Cleanup InputStream in = new FileInputStream("filepath");
@Cleanup OutputStream out = new FileOutputStream("path");
//省去try-cath-finally等操作
byte[] b = new byte[1000];
while(true){int r = in.read(b);if(r == -1) break;out.write(b,0,r);
}

相关文章:

Lombok

文章目录简介原理安装常用Getter、SetterToStringEqualsAndHashCodeNonNullNoArgsConstructor、RequiredArgsConstructor、AllArgsConstructorDATABuilderLogvalCleanup简介 Project Lombok is a java library that automatically plugs into your editor and build tools, spi…...

Koa源码学习

前言 koa是一个非常流行的Node.js http框架。本文我们来学习下它的使用和相关源码 来自官网的介绍&#xff1a; Koa 是一个新的 web 框架&#xff0c;由 Express 幕后的原班人马打造&#xff0c; 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。…...

一种延迟加载自定义元素的方法

您可能实际上并不需要所有这些&#xff1b;通常有一个更简单的方法。如果有意使用&#xff0c;此处显示的技术可能仍然对您的工具集有用。 为了保持一致性&#xff0c;我们希望我们的自动加载器也成为一个自定义元素——这也意味着我们可以通过 HTML 轻松配置它。但首先&#…...

Pytho经典面试题荟萃:第一期

目录 一、面试题 二、参考答案 解释器和编译器的区别 解释器 编译器 Python 的解释过程 Python 内存管理 Python 内存分配 引用计数 垃圾回收 其他内存管理技术 多重继承 多重继承带来的问题 命名冲突 菱形继承问题 解决多重继承带来的问题 方法重写 调用 su…...

01背包问题(大彻大悟版)

背包问题身为一个非常经典的动态规划问题&#xff0c;理清思路很重要&#xff0c;在经过多次观看y总视频和b站解析&#xff0c;加上CSDN的文章辅助&#xff0c;我终于从很多不理解到大彻大悟&#xff0c;下面是我对于背包问题思路的总结&#xff0c;有问题的话欢迎指出。谈到背…...

【麒麟服务器操作系统忘记开机密码怎么办?---银河麒麟服务器操作系统更改用户密码】

银河麒麟服务器操作系统更改用户密码 1.启动主机进入 grub 菜单&#xff0c;如图 1.1 以最新版本 Kylin-Server-10-SP2-x86-Release-Build09-20210524 为例。 图 1.1 grub 菜单 2 编辑 kernel 2.1按下”e”输入&#xff0c;输入用户名和密码&#xff08;root/Kylin123123&…...

华为OD机试(20222023)考点分类

字符串,数组,集合操作 题库分值序号题目考点 or 实现Old1001敏感字段加密字符串,数组,集合操作Old1002IPv4地址转换成整数字符串,数组,集合操作Old1006字符串分割字符串,数组,集合操作Old1007...

初级篇 3 - HTML 或 CSS 文件中不懂的标签属性详解

目录一、遇到的不懂的标签属性详解1、meta 标签的 http-equiv 属性(元标签)二、遇到的 CSS 不懂的属性详解vertical-align三、如何规避 HTML 自动换行 - 脱离文档流配置属性 display: inline-block理解 inline、inline-block、blockinline总结&#xff1a;四、导航栏自动弹出子…...

【C语言】每日刷题 —— 牛客语法篇(4)

&#x1f680;&#x1f680;前言 大家好&#xff0c;继续更新专栏 c_牛客&#xff0c;不出意外的话每天更新十道题&#xff0c;难度也是从易到难&#xff0c;自己复习的同时也希望能帮助到大家&#xff0c;题目答案会根据我所学到的知识提供最优解。 &#x1f3e1;个人主页&am…...

HashMap ConcurrentHashMap介绍

目录 HashMap 数据结构 重要成员变量 Jdk7-扩容死锁分析 单线程扩容 多线程扩容 Jdk8-扩容 ConcurrentHashMap 数据结构 并发安全控制 源码原理分析 重要成员变量 协助扩容helpTransfer 扩容transfer 总结 CopyOnWrite机制 源码原理 HashMap 数据结构 数组…...

C++语法规则3(C++面向对象)

多态 C多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的函数&#xff1b; 形成多态必须具备三个条件&#xff1a; 必须存在继承关系&#xff1b;继承关系必须有同名虚函数&#xff08;其中虚函数是在基类中使用关键字 virtual 声明的函数&#…...

Python tkinter 如何实现网站下载工具?将所有数据一键获取

前言 铁汁们有没有想过&#xff0c;如何把几个代码的功能结合到一起呢&#xff1f; 有想过的话&#xff0c;有没有实现过呢&#xff1f; 其实很简单的啊&#xff0c;咱就写一个界面就好了&#xff0c;想要哪个代码运行&#xff0c;鼠标轻轻一点就行 开发环境 python 3.8: 解…...

第六章:C语言数据结构与算法初阶之栈

系列文章目录 文章目录系列文章目录前言一、栈二、栈的实现三、接口函数的实现1、初始化2、销毁栈3、压栈与出栈4、判空5、元素个数6、返回栈顶元素四、栈中元素的访问总结前言 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 一、…...

Android学习之WebView

什么是WebView WebView是Android中UI组件的一种&#xff0c;WebView基于webkit内核&#xff0c;不过由于兼容性的原因在Android5.0后改为了Chromium内核。 WebView可以用来展示网页&#xff0c;常用于我们不想打开浏览器但又想浏览网页的情况。 WebView的使用 WebVeiw的常用…...

3/11 考试总结

时间安排 7:30–7:50 读题&#xff0c;T1 是个利用随机性的题目&#xff0c;T2 dp,T3 不知道是啥。 7:50–8:30 T1,对于随机有个结论时最值突变不超过 log &#xff0c;于是可以处理出所有 log 个区间然后统计答案&#xff0c;但这暴力做是个 3log 铁定过不去。 8:30–8:50 T2…...

Leetcode 141.环形链表 142环形链表II

141环形链表 文章目录快慢指针快慢指针 代码思路&#xff1a; slow 和fast 指向 head slow走一步&#xff0c;fast走两步 没有环&#xff1a; fast每次走2步 &#xff0c;如果 fast 最终遇到NULL(链表中的元素是 偶数)或者fast->next(链表中的元素是 奇数)遇到NULL&#xf…...

hibernate学习(五)

hibernate学习&#xff08;五&#xff09; hibernate的一对多关联映射&#xff1a; 一、数据库表与表之间关系 一对多建表原则&#xff1a; 多对多的建表原则&#xff1a; 一对一建表原则&#xff1a; &#xff08;1&#xff09;唯一外键对应&#xff1a; &#xff08;…...

STM32CubeIDE 快速开发入门指南

描述 STM32CubeIDE是一体式多操作系统开发工具&#xff0c;是STM32Cube软件生态系统的一部分。 STM32CubeIDE是一种高级C/C开发平台&#xff0c;具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse/CDT™框架和用于开发的GCC工具链&#xf…...

华为OD机试 - 火星文计算(C 语言解题)【独家】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:火星文计…...

超超超超保姆式详解——字符函数和字符串函数(学不会打我)上

目录 长度不受限制的字符串函数 strlen部分 strlen函数的易错小知识 strlen函数的实现 strcpy部分 strcat部分 自己实现strcat strstr函数部分 简单例子&#xff1a; 分析 strcmp部分 长度受限制的字符串函数 strncpy 简单例子 strncat strncmp 简单例子 &…...

Data mesh 笔记

有用的网站 https://www.datamesh-architecture.com/ https://www.agilelab.it/data-mesh-in-action https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/cloud-scale-analytics/well-architected-framework https://www.datamesh-architecture.com…...

(八十三)大白话透彻研究通过explain命令得到的SQL执行计划(2)

今天我们就一步一步的来讲解不同的SQL语句的执行计划长什么样子&#xff0c;先来看第一条SQL语句&#xff0c;特别的简单&#xff0c;就是&#xff1a; explain select * from t1 就这么一个简单的SQL语句&#xff0c;那么假设他这个里面有大概几千条数据&#xff0c;此时执行计…...

案例18-面向对象之开门小例子

目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 1.面向过程 2.面向对象 3.面向对象(反射) 三&#xff1a;过程 1.面向过程&#xff1a;原本何老师的作用交给我了米老师来完成。 2.面向对象&#xff1a;把开门的方法完全交个何老师&#xff0c;米老师不需要有…...

【碎片化知识总结】三月第一周

目录 前言 1、开发中常用的 IDEA 编辑器&#xff0c;如何做到不用每次都重新配置&#xff1f; 2、如何使用 Python 获取视频文件信息&#xff1f; 3、使用 Java 的 try-with-resources 优化代码 4、使用 shell 脚本批量修改服务器某一目录下的文件后缀名称 5、MySQL优化&…...

从零开始的JSON库(1):启程

1. JSON 是什么 JSON&#xff08;JavaScript Object Notation&#xff09;是一个用于数据交换的文本格式&#xff0c;现时的标准为ECMA-404 。 虽然 JSON 源自于 JavaScript 语言&#xff0c;但它只是一种数据格式&#xff0c;可用于任何编程语言。现时具有类似功能的格式有X…...

【Java】数组

目录 1.数组的定义与初始化 2.遍历数组 3.认识null 4.引用变量 5.返回多个值 6.数组拷贝 7.数组逆序 8.数组填充 9.小练习 //将整形数组转化为字符串 //二分查找优化 //冒泡排序优化 10.二维数组 //遍历二维数组 //不规则的二维数组 1.数组的定义与初始化 int…...

【C++】非类型的模板参数,特化

目录 1.类型模板参数和非类型模板参数 2.特化 3. 模板的分离编译 4.模板的优缺点 1.类型模板参数和非类型模板参数 之前写模板传的都是类型——类型模板参数 现在想定义两个静态数组&#xff0c;数组长度不同&#xff0c;就可以用模板参数传数值而不是传类型 非类型模板…...

核方法(kernel Method)

核方法 核方法定义 一种能够将在原始数据空间中的非线性数据映射到高维线性可分的方法。 核方法的用处 1、低维数据非线性&#xff0c;当其映射到高维空间&#xff08;feature space&#xff09;时&#xff0c;可以用线性方法对数据进行处理。 2、线性学习器相对于非线性学…...

消息队列MQ用来做什么的,市场上主流的四大MQ如何选择?RabbitMQ带你HelloWorld!

文章目录MQ用来做什么的MQ会有什么样的麻烦MQ消息队列模式分类MQ消息队列常用协议市场主流四大MQRabbitMQ项目开发RabbitMQ中的组成部分MQ用来做什么的 省流 &#xff1a;系统解耦、异步调用、流量削峰 系统解耦 首先举例下面这个场景&#xff0c;现有ABCDE五个系统&#xff…...

2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛) A — E

2023年中国高校计算机大赛-团队程序设计天梯赛&#xff08;GPLT&#xff09;上海理工大学校内选拔赛&#xff08;同步赛) 文章目录A -- A Xor B Problem题目分析codeB -- 吃苹果题目分析codeC -- n皇后问题题目分析codeD -- 分苹果题目分析codeE -- 完型填空题目分析codeA – A…...