创建没有构造函数的NumberFormat
我有以下课程:
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)
01 年前实际上这是不可能的 . 直接或间接创建至少一个
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();
我认为这可以解决你的问题 .
01 年前您可以在静态初始化块中修改
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实例 .
31 年前你可以将你的 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的更多相关文章
- JavaScript对象的创建之构造函数
通过构造函数的方式创建和基于工厂的创建类似,最大的区别就是函数的名称就是类的名称,按照java的约定,第一个字母大写. 使用构造函数创建对象时,在函数内部是通过this关键字来完成属性的定义. fun ...
- 为my_string类创建复制构造函数copy constructor ,拷贝函数名和类同名
为下面的my_string类创建一个复制构造函数,并将定义该类的代码提交. my_string类的定义: class my_string { char *s; public: my_string(ch ...
- vc++如何创建程序-构造函数
如果给Animal带参,则提示没有缺省的构造函数了,缺省就是不带参数的 改进:从子类当中向基类传递代参的,这样他就会给Animal传递400,300 对一个常量来调用 #include<iost ...
- vc++如何创建程序-构造函数02
1.若忘记了赋值,出现运行结果是很大的负值(因为我们定义的x与y这两个成员变量存储在内存中是一个随机的值) 当我们调用时,随机输出. //包含输入输出的头文件#include<iostream. ...
- c++ 2.1 编译器何时创建默认构造函数
我们通常会说当生命一个 class 时,如果我们不为该 class 指定一个 constructor,那么编译器会替我们实现一个 connstructor,那么这种说法一定对吗? 事实上,这是不对的. ...
- JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)
一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...
- C++构造函数和析构函数
构造函数简介 在上一个章节我们在创建好类的对象之后,首先对它的每一个成员属性赋值之后再对它们进行输出操作,如果不赋值就输出,这些值就会是垃圾值.而为了代码的简介,一次性为所有成员属性初始化,C++的类 ...
- JS使构造函数与new操作符无关
function User(name, passwordHash) { this.name = name; this.passwordHash = passwordHash; } 当使用User函数创 ...
- C++中默认构造函数中数据成员的初始化
构造函数的任务是初始化数据成员的,在类中,如果没有显示定义任何构造函数,编译器将为我们创建一个构造函数,称为合成的默认构造函数,合成的默认构造函数使用与变量初始化相同的规则来初始化成员.即当类中的数据 ...
- C++构造函数与析构函数
转自http://blog.csdn.net/tqtuuuu/article/details/6652144 构造函数 对于C++的构造函数,暂且将其分为以下几类: 1. 默认构造函数 2. 隐士转换 ...
随机推荐
- .NET 白板书写预测-曲线拟合
白板软件书写速度是其最核心的功能,注册StylusPlugin从触摸线程拿触摸点数据并在另一UI线程绘制渲染是比较稳妥的方案,具体的可以查看小伙伴德熙的2019-1-28-WPF-高性能笔 - lin ...
- docker安装过程 - 下载mysql
1. 下载必要的包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2. 指定虚拟机去哪里安装 docker sudo ...
- 0403-Tensor内部存储结构
0403-Tensor内部存储结构 目录 一.Tensor内部存储结构 pytorch完整教程目录:https://www.cnblogs.com/nickchen121/p/14662511.htm ...
- spring boot 向nacos注册方式,以及遇见的报错(boot!boot! 不是cloud!)
一.首先添加nacos注册发现的pom依赖 <dependency> <groupId>com.alibaba.boot</groupId> <artifac ...
- 用easyVget下载B站油管视频
B站油管等视频平台简直就是无所不有的宝库,动漫.番剧.纪录片.科普,更有海量的学习资源,可以极大地满足你的视觉欲和求知欲. 作为一只视频仓鼠,我热衷于下载自己感兴趣的视频到本地,不用担心视频被和谐.不 ...
- Ubuntu 22.04 解决和 Windows 共享蓝牙设备的问题
我有一个 Airpods,连接到 WIndows 可以正常工作,但连接到 ubuntu 后会无法连接,只能删除设备选择重联,但是这又会导致 Windows 不能连接到耳机,只能也删除重新连接,费神费力 ...
- 学习JavaScript第一天
文章目录 1.JavaScript简介 2.JavaScript编写的位置 2.1.内部JavaScript 2.2外部JavaScript 2.3内联JavaScript 3.JavaScript注 ...
- C:二进制向十进制变换
#include<stdio.h> int main() { char z[66]; scanf("%s",z); unsigned long long sum=0; ...
- leetcode 740 删除并获得点数
740 删除并获得点数 题意 给你一个整数数组 nums ,你可以对它进行一些操作. 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数.之后,你必须删除 所有 等于 n ...
- 适合才最美:Shiro安全框架使用心得
大家好,我是 V 哥.Apache Shiro 是一个强大且灵活的 Java 安全框架,专注于提供认证.授权.会话管理和加密功能.它常用于保护 Java 应用的访问控制,特别是在 Web 应用中.相比 ...