lombok 实验性注解之 @UtilityClass

本文介绍了Lombok的@UtilityClass注解,该注解用于创建final且包含静态方法和字段的类。详细讲解了注解的作用及编译后的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最全的 lombok 注解详情(随着版本不定时更新)

一、注解介绍

作用于类,将类标记为 final,并且类、内部类中的方法、字段都标记为 static

二、实战演练
@UtilityClass
public class XiaShiShi {
	public String name;
	
	public int age() {
		return 18;
	}
	
	public static void main(String[] args) {
		XiaShiShi.age();
		String name = XiaShiShi.name;
	}
}
编译后
public final class XiaShiShi {
  	public static String name;

  	public static int age() {
    	return 18;
  	}
	
  	private XiaShiShi() {
    	throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
  	}
}
### @UtilityClass 注解失效的原因分析 `@UtilityClass` 是 Lombok 提供的一个注解,用于标记工具类。当此类被标注为此注解时,Lombok 将自动使所有的构造函数私有化,并将所有非静态成员声明为 `static final` 或者 `private static final`[^1]。 如果遇到 `@UtilityClass` 注解失效的情况,通常可能是由于以下几个原因: - **缺少 Lombok 插件支持**:IDE 中未安装或配置好 Lombok 插件,这会导致编译器无法识别由 Lombok 所提供的语法糖特性。 - **版本兼容性问题**:使用的 Java 版本与 Lombok 库之间可能存在不匹配的问题,导致某些功能未能正常工作。 - **项目构建工具设置不当**:对于 Maven 和 Gradle 等构建工具而言,如果没有正确引入 Lombok 依赖项,则即使 IDE 支持也无法正常使用该插件的功能。 为了验证上述可能性并解决问题,可以采取如下措施: #### 验证和修复解决方案 ##### 安装/更新 Lombok 插件 确保开发环境中已安装最新版的 Lombok 插件。对于 IntelliJ IDEA 来说,在插件市场中搜索 “lombok”,按照提示完成安装过程即可;而对于 Eclipse 用户来说,则需访问官方网站下载相应版本进行手动安装。 ##### 添加 Lombok 依赖到项目文件 针对不同类型的构建工具,添加合适的 Lombok 依赖描述符至项目的配置文件中。以下是两种常见方式的例子: For Maven: ```xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <!-- 使用最新的稳定版本 --> <scope>provided</scope> </dependency> ``` For Gradle: ```groovy dependencies { compileOnly 'org.projectlombok:lombok:1.18.24' annotationProcessor 'org.projectlombok:lombok:1.18.24' } ``` ##### 清理缓存重新导入模块 有时因为缓存机制的存在可能会造成一些意外情况的发生,因此建议清理一次本地仓库以及 IDE 的索引后再尝试重新同步整个工程结构。 #### 示例代码展示 下面给出一段简单的例子来说明如何定义一个带有 `@UtilityClass` 注解的有效工具类: ```java import lombok.experimental.UtilityClass; @UtilityClass public class StringUtils { /** * 判断字符串是否为空白字符. */ public String trimToEmpty(String str) { return (str == null || str.trim().isEmpty()) ? "" : str.trim(); } /** * 获取两个字符串之间的最长公共前缀长度. * * @param s1 字符串一 * @param s2 字符串二 * @return 最长公共前缀长度 */ public int longestCommonPrefixLength(final String s1, final String s2) { if (s1 == null || s2 == null) { throw new IllegalArgumentException("Strings must not be null"); } int minLength = Math.min(s1.length(), s2.length()); for (int i = 0; i < minLength; ++i) { if (s1.charAt(i) != s2.charAt(i)) { return i; } } return minLength; } } ``` 以上操作完成后再次运行程序应该能够成功应用 `@UtilityClass` 注解的效果了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值