gpt4 book ai didi

java - 使用非静态公共(public)最终变量公开实例常量

转载 作者:行者123 更新时间:2023-11-29 05:55:38 25 4
gpt4 key购买 nike

我从来没有在我周围的任何 Java 代码中看到过这种常量声明...所以我想知道您是否看到使用非静态最终常量的任何缺点。

例如,我已将 Guava 函数声明为给定 MaintenanceMode 实例的公共(public)常量。我认为这样更好,因为如果我创建了一个 getDecoratorFunction(),它每次都会创建一个新的函数实例……

或者 get 函数可以返回在类中保持私有(private)的单个实例函数,但它有无用的代码......当我们在类级别声明常量时,我​​们直接声明常量是公共(public)的,我们不把它们放在private 并提供一个 public getter 来访问它们......

public class MaintenanceMode {

/**
* Provides a function to decorate a push service with the appropriate decorator
*/
public final Function<PushService,PushService> MAINTENANCE_DECORATION_FUNCTION = new Function<PushService,PushService>() {
@Override
public PushService apply(PushService serviceToDecorate) {
return new PushServiceMaintenanceDecorator(serviceToDecorate,MaintenanceMode.this);
}
};

private final EnumMaintenanceMode maintenanceMode;
private final long milliesBetweenMaintenances;
private final Optional<ExecutorService> executorService;


public EnumMaintenanceMode getMaintenanceMode() {
return maintenanceMode;
}

public long getMilliesBetweenMaintenances() {
return milliesBetweenMaintenances;
}

public Optional<ExecutorService> getExecutorService() {
return executorService;
}


private MaintenanceMode(EnumMaintenanceMode maintenanceMode, long milliesBetweenMaintenances, ExecutorService executorService) {
Preconditions.checkArgument(maintenanceMode != null);
Preconditions.checkArgument(milliesBetweenMaintenances >= 0);
this.maintenanceMode = maintenanceMode;
this.milliesBetweenMaintenances = milliesBetweenMaintenances;
this.executorService = Optional.fromNullable(executorService);
}

}

我可以通过以下方式访问这个变量:

  pushServiceRegistry.decoratePushServices(maintenanceMode.MAINTENANCE_DECORATION_FUNCTION);

我想如果我的 maintenanceMode 是可变的并且被多个线程访问,它可能会导致奇怪的行为,但这里不是。

您认为使用这种代码有什么缺点吗?


编辑: 我可以有多个 MaintenanceMode 实例,所有实例都应该能够根据 MaintenanceMode 状态提供不同的常量函数。所以我不能使用无法访问 MaintenanceMode 状态的静态变量。

最佳答案

setter/getter 的作用是动态分配。如果您不需要它,使用 public final 字段就可以了。我什至经常编写没有 getter 的类似 bean 的对象,只有 public final 字段。

关于java - 使用非静态公共(public)最终变量公开实例常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12248635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com