Java 关于 final 与 IService 红色下划线的问题

问题:请问“错误代码”中,为什么“private final IExpResConfigService iExpResConfigService;”在IDEA中会有红色下划线?但是去掉了final之后红色下划线又消失了?

img

正确代码

@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/experiment-management/resConfig")
public class ExpResConfigController extends BaseController {

    private final IExpResConfigService iExpResConfigService;

    /**
     * 查询实验资源配置列表
     */

错误代码



@RestController
public class webssh {

    @Autowired
    private publicUtils PublicUtils;

    private final IExpResConfigService iExpResConfigService;

final 要求初始化是需要赋值,你正确的代码有 @RequiredArgsConstructor 这个lombok注解,它会创建带参数的构造方法,能保证这个实例ExpResConfigController 初始化的时候传入了final的对象,所以可以用final

final表示只读的
一个只读对象你不给它赋初值,那后续就没法对它赋值了呀
一个final对象不赋值就等于白定义了

final不可变
要么创建对象时声明
要么构造函数里面赋值