Java中构造参数new关键字用法及类名$符号含义解析
关于Spring Security中User$UserBuilder的两个问题解答
1. 类名中的$符号是命名约定还是有功能意义?
在Java里,$符号不是单纯的命名约定,而是编译器对内部类的标准命名规则,具备实际功能意义。User$UserBuilder代表UserBuilder是User类的静态内部类——Java编译器会自动将内部类编译为外部类$内部类.class的文件,用$来明确标识内部类与外部类的归属关系,同时保证类名的全局唯一性。
2. 构造方法参数中的new关键字是什么意思?
你看到的new org.springframework.security.core.userdetails.User(){} x0是创建一个匿名内部类的实例:
new User(){}的写法,本质是定义一个继承自User的匿名子类(没有显式类名),同时直接实例化这个子类对象;- 这个实例被作为参数传入
UserBuilder的构造方法。
需要说明的是,Spring Security的UserBuilder构造方法是包访问权限或私有,实际开发中我们不会直接调用它,而是通过User.withUsername()这类静态工厂方法获取Builder实例。你看到的这个构造方法大概率是反编译后的代码,是编译器为处理内部类访问逻辑自动生成的,无需在业务代码中手动编写。
内容的提问来源于stack exchange,提问作者yes_shashank
相关产品推荐
相关产品推荐

