你好,欢迎进入江苏优软数字科技有限公司官网!

诚信、勤奋、创新、卓越

友好定价、专业客服支持、正版软件一站式服务提供

13262879759

工作日:9:00-22:00

DefArgs:Java注解处理器,@DefaultValue与@Omittable详解——支持参数默认值与重载方法生成

发布时间: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

DefArgs 注解处理器 Maven 依赖配置 @DefaultValue @Omittable 参数默认值生成_intellij idea 2025_DefArgs Java 注解处理器 @DefaultValue @Omittable 默认值支持重载方法生成

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

如有侵权请联系删除!

13262879759

微信二维码