1.自动拆箱导致空指针
例如:
Integer a =null;
if(a==1){
}
if(a!=null){
}
- 所有整型包装类对象之间值的比较,全部使用 equals 方法比较
- 这里a自动拆箱时就会报空指针,所以这里直接非空判断就可以
2.策略模式+工厂模式简化if-else
- 在策略实现类中,使用dao层或者其他类中的方法时,@Autowired会Ban注入失败全部报NPR 例如:
@Service
@Slf4j
public class ServiceErrorImpl implements Strategy {
@Autowired
private AnalysisService analysisService;
(analysisService会报NPR)
解决办法:
- 使用构造方法
public ServiceErrorImpl(AnalysisService analysisService) {
this.analysisService = analysisService;
}
注:使用这种方式如果analysisService类中使用到其它类对象,也会直接报NPR
- 使用Set方法
public interface Strategy {
boolean alarmDeal(AlarmLeft alarmLeft, RequestRecord requestRecord, MongoTemplate mongoTemplate);
void setAnalysisService(AnalysisService analysisService);
}
- 在调用处传入analysisService对象
传入策略模式,根据传入的key来决定选择执行哪一个策略
Strategy strategy = StrategyFactory.creator(alarmIndex);
strategy.setAnalysisService(analysisService);