我有以下课程:

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)

3回答

  • 0
    1 年前

    实际上这是不可能的 . 直接或间接创建至少一个 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();

    我认为这可以解决你的问题 .


  • 0
    1 年前

    您可以在静态初始化块中修改 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 实例 .


  • 3
    1 年前

    你可以将你的 class 变成一个单身人士 .

    当你想使用 NF 时,它会自动完成's not entirely the format you want but it does meet your requirements in that you do not have to instantiate the class yourself, it' .

    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;
    }
    }
 

创建没有构造函数的NumberFormat的更多相关文章

  1. JavaScript对象的创建之构造函数

    通过构造函数的方式创建和基于工厂的创建类似,最大的区别就是函数的名称就是类的名称,按照java的约定,第一个字母大写. 使用构造函数创建对象时,在函数内部是通过this关键字来完成属性的定义. fun ...

  2. 为my_string类创建复制构造函数copy constructor ,拷贝函数名和类同名

    为下面的my_string类创建一个复制构造函数,并将定义该类的代码提交. my_string类的定义: class my_string { char *s; public: my_string(ch ...

  3. vc++如何创建程序-构造函数

    如果给Animal带参,则提示没有缺省的构造函数了,缺省就是不带参数的 改进:从子类当中向基类传递代参的,这样他就会给Animal传递400,300 对一个常量来调用 #include<iost ...

  4. vc++如何创建程序-构造函数02

    1.若忘记了赋值,出现运行结果是很大的负值(因为我们定义的x与y这两个成员变量存储在内存中是一个随机的值) 当我们调用时,随机输出. //包含输入输出的头文件#include<iostream. ...

  5. c++ 2.1 编译器何时创建默认构造函数

    我们通常会说当生命一个 class 时,如果我们不为该 class 指定一个 constructor,那么编译器会替我们实现一个 connstructor,那么这种说法一定对吗? 事实上,这是不对的. ...

  6. JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

    一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...

  7. C++构造函数和析构函数

    构造函数简介 在上一个章节我们在创建好类的对象之后,首先对它的每一个成员属性赋值之后再对它们进行输出操作,如果不赋值就输出,这些值就会是垃圾值.而为了代码的简介,一次性为所有成员属性初始化,C++的类 ...

  8. JS使构造函数与new操作符无关

    function User(name, passwordHash) { this.name = name; this.passwordHash = passwordHash; } 当使用User函数创 ...

  9. C++中默认构造函数中数据成员的初始化

    构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...

  10. C++构造函数与析构函数

    转自http://blog.csdn.net/tqtuuuu/article/details/6652144 构造函数 对于C++的构造函数,暂且将其分为以下几类: 1. 默认构造函数 2. 隐士转换 ...

随机推荐

  1. Java实用小工具系列1---使用StringUtils分割字符串

    经常有这种情况,需要将逗号分割的字符串,比如:aaa, bbb ,ccc,但往往是人工输入的,难免会有多空格逗号情况,比如:aaa, bbb , ccc, ,,这种情况使用split会解析出不正常的结 ...

  2. iOS文本字数动态展示使用小结

    项目开发中经常用到类似这样的功能,文本输入的时候需要动态的显示文本输入字数.这里以多行文本框为例,介绍一下实现方案.核心代码如下 -(void)textViewDidChange:(UITextVie ...

  3. 使用 Fluent Bit 实现云边统一可观测性

    本文基于 KubeSphere 可观测性与边缘计算负责人霍秉杰在北美 KubeCon 的 Co-located event Open Observability Day 闪电演讲的内容进行整理. 整理 ...

  4. vscode中整合豆包MarsCode编程助手

    豆包MarsCode是字节跳动旗下的一款AI工具,最近在刷帖子时看到已经可以在vscode中通过插件安装MarsCode工具,接下来我们来看下操作流程以及使用效果. 第一步:首先需要注册下豆包账号 豆 ...

  5. 写代码被大语言模型坑之使用LocalDateTime比较两个时间差了几天

    自从去年ChatGPT3.5发布后使用了几次,现在写代码基本上离不开它和它的衍生产品们了.一方面查资料很方便,快速提炼要点总结:另一方面想写什么样的代码一问就能生成出来,功能大差不差,稍微改改就能用, ...

  6. Oracle的用户如何优雅地达成软件合规目标

    企业一旦发展到了一定规模,就会衍生软件100%合规正版化的需求. 而对于使用到Oracle的用户,当然,具体核定的购买数量和off等商务问题,需要客户管理层直接和对应的Oracle销售代表进行商务谈判 ...

  7. 多校A层冲刺NOIP2024模拟赛20

    多校A层冲刺NOIP2024模拟赛20 昨天晚上打 ABC 了,所以今天才发. T1 星际联邦 直接上 菠萝(Borůvka)算法就行了,当然还可以用线段树优化 prim算法,但是没打过只是口胡:就是 ...

  8. java.lang.NoSuchMethodError: org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(Ljava/io/File;Z) 报错处理

    字面看下:没有该方法,首先应该推测有可能是Jar冲突导致的,因为一些jar中的类在升级的过程中不会向下兼容,所以有一些高级属性或方法就jar中没有,此POI就是. 可以先看下这个类的资源加载路径: C ...

  9. 鸿蒙Navigation拦截器实现页面跳转登录鉴权方案

    我们在进行页面跳转时,很多情况下都得考虑登录状态问题,比如进入个人信息页面,下单交易页面等等.在这些场景下,通常在页面跳转前,会先判断下用户是否已经登录,若已登录,则跳转到相应的目标页面,若没有登录, ...

  10. Python 潮流周刊#77:Python 依赖管理就像垃圾场火灾?(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...