You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将someExecutor类中的SomeMapper实例变量设为static有何优势?

将Executor类的Mapper变量改为static final的优势分析

背景代码

SomeMapper接口

public interface SomeMapper {
     SomeMapper INSTANCE = Mappers.getMapper(SomeMapper.class);

     // 示例方法
     public RandomResponse doSomething();
}

原someExecutor类

public class someExecutor {
     private final SomeMapper someMapper = SomeMapper.INSTANCE;

     public void someFunction() {
         final RandomResponse randomVariable = someMapper.doSomething();
     }
}

问题

将someExecutor类中的someMapper变量改为private static final SomeMapper someMapper = SomeMapper.INSTANCE,相比原有的private final修饰写法,是否存在优势?


回答

有明确的优势,主要体现在这几点:

  • 减少内存开销:SomeMapper.INSTANCE是全局单例,原来每个someExecutor实例都会持有一份该单例的引用。改成static后,整个someExecutor类只会保存这一份引用,当someExecutor被大量创建实例时,能避免不必要的内存浪费。
  • 优化初始化逻辑:static变量在类加载阶段就完成初始化,而实例变量要等到创建对象时才赋值。这里因为INSTANCE本身是单例,提前初始化没有风险,还省去了每次创建someExecutor实例时重复赋值的操作。
  • 语义更清晰:用static修饰能明确表达“这个变量属于类本身,和实例无关”的含义,符合SomeMapper.INSTANCE作为单例的使用场景,让其他开发者一眼就能看懂这个变量的作用,提升代码可读性。

内容的提问来源于stack exchange,提问作者RandomGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:01:02