发布时间:2025-11-27
浏览次数:0
有一个针对Java的注解处理器,借助@以及@这种形式,给方法参数予以默认值的可支持性,同时进行重载方法的生成 。
快速开始
在 Maven 项目中添加依赖( 查看最新版本 ):
io.github.thirty30ww
defargs
LATEST
#技术分享
使用方法具体类使用 @
往具体类的方法参数那儿添加上 @ 注解,编译器它就会自动去生成带有默认值的重载方法 。
public class UserService {
public void createUser(
String name,
@DefaultValue("18") int age,
类型为布尔值的变量 active,被赋予了使用 @DefaultValue("true") 所指定的默认值 。
) {
}
}
编译后自动生成:
公开的 void 类型方法,用于创建用户,给出一个字符串类型的名字,以及一个整型的年龄 。
createUser(name, age, true);
}
公开的无效的方法,用于创建用户,该方法接收一个字符串类型的名字参数,名为“name”,此方法调用名为“createUser”的另一个方法,传递该名字参数,以及一个整数值“18”,还有一个布尔值“true”作为参数。 最后的标点符号有。
现在你可以用更简洁的方式调用:
service.createUser("Alice");
针对“Bob”,以25这个数值,进行服务所涉及的创建用户操作;。
service,进行创建用户的操作,用户名为Charlie,年龄是30岁,状态为否;。
接口和抽象类使用 @
对于接口或者抽象类型的抽象方法而言intellij idea 2025,运用@注解来标志能够省略的参数,编译器它会产生对应的抽象重载方法。
公开的接口,名为用户存储库,它是这样的,即它有着特定的定义,是名为UserRepository的那种。
User findUser(
String name,
@Omittable int age,
@Omittable boolean active
);
}
编译后自动生成抽象重载方法:
用户通过输入姓名以及年龄,来查找用户,此操作所用的方法为findUser ,其中姓名是字符串类型,年龄为整数类型 。
User findUser(String name);
在实现类中,使用 @ 提供具体的默认值:
创建一个名为UserRepositoryImpl的类,使其实现UserRepository接口 。
@Override

public User findUser(
String name,
@DefaultValue("18") int age,
@DefaultValue("true") boolean active
) {
返回,一个,新的,用户,该用户,由名字,年龄,活跃度,构成,句号。
}
}
工作原理
由 Java 注解处理器于编译之际生成重载方法,此过程不依靠反射,并且对于运行时性能毫无影响 。
会扫描所有带有 @ 或者 @ 注解的方法参数的注解处理器intellij idea 2025,在编译的时候会直接对 AST(抽象语法树)作出修改,把生成的重载方法添加到同一个类或者接口里面。这表明所生成的代码跟手写代码是完全一样的,不存在丝毫性能耗资。
注意事项1. 注解使用规则
定义一个公共的方法,该方法有一个整型参数a,还有一个整型参数b,这个b带有默认值为1 。
这种表达不符合常规中文句子的形式呀,因为它是一段代码相关的内容,按照要求改写会非常生涩且失去原有代码意义,不太能按照正常句子改写规则来进行改写呢。但勉强。
抽象的无返回值方法,其带有一个整型参数a ,以及一个带有默认值为1的整型参数b 。
公共的无效的方法,带有整型参数a,还有一个可省略的整型参数b,这样定义 { } 。
2. 可省略参数必须从右向左连续
void方法,其中有一个整型参数a,有一个整型参数b且其具有默认值为“1”,还有一个整型参数c且其具有默认值为“2” 。
定义一个无返回值的方法,该方法有三个参数,第一个参数是整型变量a,其默认值为“1”,第二个参数是整型变量b,第一个参数是整型变量c,其默认值为“2” 。
3. 不要手动定义冲突的重载方法
如果手动定义了与生成方法签名相同的重载方法,编译时会报错:
公共的整型 测试方法 (整型 a,带有默认值为 “2” 的整型 b) { } (注:此不是正常中文语义,只是按要求对代码结构进行类似表述拆分)。
return a +
}
公开的,整型的,测试的方法,传入一个整型参数 a,返回该参数与某个数相加的结果,只是这里相加的数未完整给出。
}
编译错误信息:
按照【DefaultValue】的要求,在类 com.example.MyClass 里,已经将方法 test(int) 给定义好了 。
4. 支持的类型
@ 注解目前支持以下类型的默认值:
留意:默认的数值应该算是字符串方面的字面量,编译制造的器具能够自动去转变成为相应类型中的数值 。
对于@而言,是能够被用于任何种类的参数的,这里面涵盖了基本类型,还有包装类型以及字符串类型。
IDEA 支持
倘若你运用IDEA,那么建议安装与之配套的,如此一来能够获取更为优良的开发体验,插件会使得IDEA识别那些所生成的重载方法,将错误提示予以消除并且提供代码补全。
构建项目
mvnw clean install
协议
MIT
如有侵权请联系删除!
Copyright © 2023 江苏优软数字科技有限公司 All Rights Reserved.正版sublime text、Codejock、IntelliJ IDEA、sketch、Mestrenova、DNAstar服务提供商
13262879759
微信二维码