@SneakyThrows对BeanUtils.copyProperties无效导致编译报错如何解决
问题解决方案
根因说明
该报错是Java编译器检测到BeanUtils.copyProperties方法会抛出受检异常IllegalAccessException,但当前代码既未显式捕获,也没有在方法签名上声明抛出,说明@SneakyThrows注解没有实际生效。
可用解决方案
- 检查注解导入是否正确
确认导入的是Lombok官方的注解:import lombok.SneakyThrows;,避免导入其他第三方同名注解。 - 开启项目注解处理器支持
- IDEA环境:打开
Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing选项。 - Maven/Gradle构建环境:确认构建配置中已经添加Lombok注解处理器依赖,不是仅引入编译依赖。Maven配置示例如下:
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>8</source> <target>8</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.16</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build> - IDEA环境:打开
- 显式指定注解处理的异常类型
调整注解写法,强制指定要处理的异常:@SneakyThrows(IllegalAccessException.class) protected void process(){ BeanUtils.copyProperties(A, B); } - 替换BeanUtils实现(可选)
如果你当前用的是Apache Commons的org.apache.commons.beanutils.BeanUtils,可以替换为Spring自带的org.springframework.beans.BeanUtils,该实现不会抛出受检异常,无需额外处理即可编译通过。 - 临时手动处理异常(兜底方案)
如果注解始终无法生效,可以手动捕获异常后包装为运行时异常抛出:protected void process(){ try { BeanUtils.copyProperties(A, B); } catch (IllegalAccessException e) { throw new RuntimeException(e); } }
内容的提问来源于stack exchange,提问作者michealAtmi
相关产品推荐
相关产品推荐

