将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
相关产品推荐
相关产品推荐

