我有以下课程:
import java.text.NumberFormat;
public static class NF
{
public static NumberFormat formatShares = NumberFormat.getInstance();
public static NumberFormat formatCash = NumberFormat.getInstance();
public NF(){
formatShares.setGroupingUsed(true);
formatShares.setMaximumFractionDigits(0);
formatCash.setGroupingUsed(true);
formatCash.setMaximumFractionDigits(2);
formatCash.setMinimumFractionDigits(2);
}
}
总有办法做到这一点,所以我不必实例化该类吗?本质上,我希望能够只使用NF.formatCash.format(1234567.456)
答案 0 :(得分:3)
您可以在静态初始化块中修改NumberFormat
对象:
public static class NF {
public static NumberFormat formatShares = NumberFormat.getInstance();
public static NumberFormat formatCash = NumberFormat.getInstance();
static {
formatShares.setGroupingUsed(true);
formatShares.setMaximumFractionDigits(0);
formatCash.setGroupingUsed(true);
formatCash.setMaximumFractionDigits(2);
formatCash.setMinimumFractionDigits(2);
}
}
初始化类时,初始化块中的代码将运行,因此无需创建NF
的实例即可执行代码。
答案 1 :(得分:0)
您可以将您的班级变成单身。
这并不完全是您想要的格式,但是它确实满足您的要求,因为您不必自己实例化该类,当您要使用NF
时,它会自动完成。
NF.getInstance().formatCash.format(1234567.456)
您的课程将如下所示:
public class NF {
public NumberFormat formatShares = NumberFormat.getInstance();
public NumberFormat formatCash = NumberFormat.getInstance();
private static NF theInstance;
private NF() {
formatShares.setGroupingUsed(true);
formatShares.setMaximumFractionDigits(0);
formatCash.setGroupingUsed(true);
formatCash.setMaximumFractionDigits(2);
formatCash.setMinimumFractionDigits(2);
}
public static NF getInstance() {
if (theInstance == null) {
theInstance = new NF();
}
return theInstance;
}
}
答案 2 :(得分:0)
实际上这是不可能的。您直接或间接创建至少一个NumberFormat
实例。您可以减少这些实例的数量。
使用static
对象:
public static final NumberFormat formatShares = NumberFormat.getInstance();
static {
formatShares.setGroupingUsed(true);
formatShares.setMaximumFractionDigits(0);
}
对于多个线程,这是不正确的,因为NumberFormat
未保存线程。
在每个线程的实例上使用ThreadLocal
:
public static final ThreadLocal<NumberFormat> threadLocalFormatShares = ThreadLocal.withInitial(() -> {
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(true);
nf.setMaximumFractionDigits(0);
return nf;
});
NumberFormat formatShares = threadLocalFormatShares.get();
我认为这可以解决您的问题。