深圳优化网站关键词,wordpress系统下载,无忧网站模板,wordpress页脚改颜色文章目录 一、日志输出二、字符串拼接三、日期比较四、常用注解五、Lombok的原理 提示#xff1a;以下是本篇文章正文内容#xff0c;下面案例可供参考
一、日志输出
之前使用的方式。在要使用的类里面定义日志类#xff1a; private static Logger logger LoggerFactory… 文章目录 一、日志输出二、字符串拼接三、日期比较四、常用注解五、Lombok的原理 提示以下是本篇文章正文内容下面案例可供参考
一、日志输出
之前使用的方式。在要使用的类里面定义日志类 private static Logger logger LoggerFactory.getLogger(“xxx”); 现在使用方式:
### pom.xml配置文件引入依赖dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.22/versionscopeprovided/scope/dependency使用方式: 在要使用的类上添加注解Slf4j
想输出日志直接使用log.info或log.error 即可不在需要定义日志类(和之前使用日志输出一样)。示例代码如下。
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;Slf4j
public class T1 {public static void main(String[] args) {MyObject obj new MyObject(example, 42);String jsonString JSONObject.toJSONString(obj);//将对象转为jsonObjectSystem.out.println(jsonString);log.info(输出日志信息:jsonString);log.error(输出日志信息:jsonString);}static class MyObject {private String name;private int value;public MyObject(String name, int value) {this.name name;this.value value;}// Getters and setterspublic String getName() {return name;}public void setName(String name) {this.name name;}public int getValue() {return value;}public void setValue(int value) {this.value value;}}
}二、字符串拼接
使用方式:String.format(%s|%s|%s, s1, s2, s3).以|作为连接 Object s1A1;Object s2B2;Object s3C3;String stringDeal String.format(%s|%s|%s, s1, s2, s3);System.out.println(据输出:stringDeal);据输出:A1|B2|C3三、日期比较
isAfter 和 isBefore 是 java.util.Date 类中的两个方法用于比较两个日期对象。 isAfter(Date when) isAfter 方法用于检查调用该方法的日期对象是否在指定日期参数 when 之后。如果调用对象的日期晚于参数日期则返回 true否则返回 false。 isBefore(Date when) isBefore 方法用于检查调用该方法的日期对象是否在指定日期参数 when 之前。如果调用对象的日期早于参数日期则返回 true否则返回 false。
import java.util.Date;public class DateComparison {public static void main(String[] args) {Date now new Date(); // 当前日期和时间Date tomorrow new Date(now.getTime() 86400000); // 假设明天的日期// 检查现在是否在明天之后System.out.println(Is now after tomorrow? now.isAfter(tomorrow));// 检查现在是否在明天之前System.out.println(Is now before tomorrow? now.isBefore(tomorrow));// 检查明天是否在现在之后System.out.println(Is tomorrow after now? tomorrow.isAfter(now));// 检查明天是否在现在之前System.out.println(Is tomorrow before now? tomorrow.isBefore(now));}
}输出:
Is now after tomorrow? false
Is now before tomorrow? true
Is tomorrow after now? true
Is tomorrow before now? false四、常用注解
Data注解是一个综合性的注解它可以为类生成所有常用的方法包括getter和setter、equals和hashCode、toString、构造器等等。例如
注解功能Getter为属性生成getter方法Setter为属性生成setter方法NoArgsConstructor为类生成无参构造器RequiredArgsConstructor为类生成包含所有final或NonNull属性作为参数的构造器AllArgsConstructor为类生成包含所有属性作为参数的构造器Data为类生成所有常用的方法包括getter和setter、equals和hashCode、toString、构造器等等Builder为类生成一个构建器builder模式让你可以用链式调用的方式创建对象Slf4j为这个类生成一个名为log的日志变量使用org.slf4j.Logger作为日志框架。让可以方便地打印日志信息SneakyThrows让你在方法中抛出受检异常checked exception而不需要在方法签名中声明或者使用try-catch语句Value为类生成一个不可变immutable的对象即所有属性都是final的并且只有getter方法没有setter方法Accessor为属性生成自定义的访问方法让你可以控制方法的名称、修饰符、参数等等With为属性生成一个返回一个新对象的方法让你可以用不可变immutable的方式修改对象的属性Singular为集合属性生成一个构建器builder模式让你可以用链式调用的方式添加元素NonNull为方法或构造器的参数添加非空检查如果参数为null抛出NullPointerExceptionCleanup为需要关闭的资源自动调用close方法避免资源泄漏Synchronized为方法添加同步锁避免多线程问题EqualsAndHashCode为类生成equals和hashCode方法根据属性的值判断对象是否相等ToString为类生成toString方法返回对象的字符串表示Delegate为类生成委托delegate方法让你可以调用另一个对象的方法而不需要自己编写Val表示一个不可变的局部变量相当于使用final修饰符Var表示一个可变的局部变量相当于省略了类型声明
举几个常用例子
Data 常用 Data注解是一个综合性的注解它可以为类生成所有常用的方法包括getter和setter、equals和hashCode、toString、构造器等等。例如 import lombok.Data;Data
public class User {private String name;private int age;
}这段代码相当于
public class User {private String name;private int age;public User() {}public User(String name, int age) {this.name name;this.age age;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;User user (User) o;return age user.age Objects.equals(name, user.name);}Overridepublic int hashCode() {return Objects.hash(name, age);}Overridepublic String toString() {return User{ name name \ , age age };}
}可以看到使用Data注解可以大大减少你的代码量让你的类更简洁和清晰。当然如果你不想生成所有的方法你也可以使用其他的注解来选择性地生成你需要的方法。
五、Lombok的原理
Lombok利用了Java的注解处理器Annotation Processor机制它可以在编译时扫描和处理注解并生成额外的Java代码。Lombok通过实现一个自定义的注解处理器来拦截和修改抽象语法树AST从而在类中添加相应的方法字段构造器等。Lombok还提供了一个插件可以让IDE在编辑时也能识别和显示Lombok生成的代码从而避免编译错误和提示信息的不一致。
Lombok的原理可以用以下几个步骤来概括
定义一个注解比如Getter用来标记需要生成getter方法的类或字段。定义一个注解处理器比如GetterProcessor用来处理Getter注解并在类中生成相应的getter方法。在注解处理器中使用Lombok提供的API比如JavacASTJavacHandlerUtil等来获取和修改AST。在编译时使用javac或者其他工具比如mavengradle等来调用注解处理器并传入源代码。注解处理器扫描源代码中的注解并根据注解的参数和目标来生成相应的代码并添加到AST中。编译器根据修改后的AST来生成字节码文件.class文件。
参考:参考Lombok
总结: Lombok是一个非常实用的Java库它可以让我们的代码更加简洁可读健壮。Lombok有很多优点但也有一些缺点比如可能会影响代码的调试测试维护等。因此在使用Lombok时我们需要权衡利弊根据自己的需求和喜好来选择合适的注解和配置。