内部类与静态内部类

发布时间 2023-04-18 11:26:19作者: 做时间的好朋友

1.内部类

  • 内部类可以访问父类的所有成员变量及作用域中的数据
  • 内部类可以对其他包隐藏
  • 要使用的时候必须先有父类

2.静态内部类

  • 静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。
  • 部类可以使用静态内部类的类名作为调用者来访问静态内部类的类成员,也可以使用静态内部类对象访问其实例成员。

3.大白话

  • 如果内部类中需要访问父类的属性及一些数据,需要定义普通内部类
  • 如果内部类中不需要访问父类的属性,成员,而且也可以独立使用,那么就定义为静态内部类

4.样例

4.1静态内部类

  • AlarmConvert内部类不需要使用到父类的任何成员及相关字段,就定义为静态内部类
@Component
@Slf4j
public class ConvertAlarmNode implements Node<AlarmModel> {

    List<CallbackListener> callbackListeners;

    @Resource
    AlarmConvert alarmConvert;

    @PostConstruct
    public void init(){
        this.callbackListeners = Lists.newArrayList(BeanContext.getBean(AlarmHistoryRecordListener.class));
    }

    @Override
    public void run(ProcessContext<AlarmModel> context) {
        AlarmHistoryRecord historyRecord = alarmConvert.convert(context.getProcessModel());
        for (CallbackListener listener : callbackListeners) {
            listener.onMessage(historyRecord);
        }
        log.info("消息ID:[{}] @@三方告警告警数据历史记录执行完毕",context.getProcessModel().messageId);
    }

    @Component
    static class AlarmConvert implements Converter<AlarmModel, AlarmHistoryRecord>{

        @Override
        public AlarmHistoryRecord convert(AlarmModel alarmModel) {
            return null;
        }
    }
}