说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Java 9中新的货币API

HTML文档下载 WORD文档下载 PDF文档下载
此前,Oracle公布Java 9首个增强计划集(众所周知的JEPs)确定会在2016年早些时候发布。而目前,JSR 354定义了一套新的Java货币API,计划会在Java 9中正式引入。

JSR 354定义了一套新的Java货币API,计划会在Java 9中正式引入。本文中我们将来看一下它的参考实现:JavaMoney的当前进展。

正如我在之前那篇Java 8新的日期时间API一文中那样,本文主要也是通过一些代码来演示下新的API的用法 。

在开始之前,我想先用一段话来简短地总结一下规范定义的这套新的API的用意何在:

对许多应用而言货币价值都是一个关键的特性,但JDK对此却几乎没有任何支持。严格来讲,现有的java.util.Currency类只是代表了当前ISO 4217货币的一个数据结构,但并没有关联的值或者自定义货币。JDK对货币的运算及转换也没有内建的支持,更别说有一个能够代表货币值的标准类型了。

如果你用的是Maven的话,只需把下面的引用添加到工里面便能够体验下该参考实现的当前功能了:

<dependency>  <groupId>org.javamoney</groupId>  <artifactId>moneta</artifactId>  <version>0.9</version></dependency>

规范中提到的类及接口都在javax.money.*包下面。

我们先从核心的两个接口CurrencyUnit与MonetaryAmount开始讲起。

CurrencyUnit及MonetaryAmount

CurrencyUnit代表的是货币。它有点类似于现在的java.util.Currency类,不同之处在于它支持自定义的实现。从规范的定义来看,java.util.Currency也是可以实现该接口的。CurrencyUnit的实例可以通过MonetaryCurrencies工厂来获取:

// 根据货币代码来获取货币单位 CurrencyUnit euro = MonetaryCurrencies.getCurrency("EUR");    CurrencyUnit usDollar = MonetaryCurrencies.getCurrency("USD"); // 根据国家及地区来获取货币单位    CurrencyUnit yen = MonetaryCurrencies.getCurrency(Locale.JAPAN); CurrencyUnit    canadianDollar = MonetaryCurrencies.getCurrency(Locale.CANADA);
MontetaryAmount代表的是某种货币的具体金额。通常它都会与某个CurrencyUnit绑定。MontetaryAmount和CurrencyUnit一样,也是一个能支持多种实现的接口。CurrencyUnit与MontetaryAmount的实现必须是不可变,线程安全且可比较的。

/ get MonetaryAmount from CurrencyUnitCurrencyUnit euro = MonetaryCurrencies.getCurrency("EUR");MonetaryAmount fiveEuro = Money.of(5, euro); // get MonetaryAmount from currency codeMonetaryAmount tenUsDollar = Money.of(10, "USD"); // FastMoney is an alternative MonetaryAmount factory that focuses on performanceMonetaryAmount sevenEuro = FastMoney.of(7, euro);

Money与FastMoney是JavaMoney库中MonetaryAmount的两种实现。Money是默认实现,它使用BigDecimal来存储金额。FastMoney是可选的另一个实现,它用long类型来存储金额。根据文档来看,FastMoney上的操作要比Money的快10到15倍左右。然而,FastMoney的金额大小与精度都受限于long类型。

注意了,这里的Money和FastMoney都是具体的实现类(它们在org.javamoney.moneta.*包下面,而不是javax.money.*)。如果你不希望指定具体类型的话,可以通过MonetaryAmountFactory来生成一个MonetaryAmount的实例:

MonetaryAmount specAmount = MonetaryAmounts.getDefaultAmountFactory()                .setNumber(123.45) .setCurrency("USD") .create();
当且仅当实现类,货币单位,以及数值全部相等时才认为这两个MontetaryAmount实例是相等的。
VB创建位图菜单 VB实现按钮浮动效果 VB应用程序中的工具提示和状态显示 VB中处理长列表框项的两种方法 VB中多级下拉列表的实现 VB中防止将重复项目添加到列表框控件中 VB中实现菜单分割 VB中实现带预览的对话框 VB中实现同一窗口的多个实例及控件的动态增减 VB中阴影字体的实现 VB自定义数据结构的传输转换 Visual Basic 窗体背景花纹的实现 Visual Basic 中的界面设计原则和编程技巧 Visual Basic 中文本框处理技巧集萃 Visual Basic 中字符淡出淡入的实现 Visual Basic窗体背景花纹的实现 Visual Basic下工具条的制作 Visual Basic中的界面设计原则和编程技巧 Visual Basic中在同一界面输入大量数据的几种方法 VisualBasic中的界面设计原则和编程技巧 VisualBasic中用户界面的设计原则 把 VB 标准的工具栏变成平面式 把窗体卸载干净-VB资料 保持初始的窗体大小-VB资料 编程实现将所有窗口最小化-VB资料 不规则形状窗口详细说明 -VB资料 不用 API ,直接调用关联的程序 -VB资料 处理过程时的鼠标显示 -VB资料 窗口处理技巧大全 -VB资料 窗口事件的发生顺序-VB资料 VB创建不规则窗口 请问vc60.idb和vc60.pdb是干什么用的? dreamweaver Mx再繁體系統中的使用 乱码问题!请高手赐教!! 请问在jsp中如何连接access数据库? 你愿意赐教吗? w3svc记录的时间跟系统时间不一致? 谁能告诉我在哪儿可以下载到微软BHO的例子? 一个弄了很长时间的问题,高手过来看看。。 怎样在网页中显示数据类型为"OLE 对象"的图片 可以帮我看一下这段程序吗? 谢谢! 急救我 请问 tomcat 中服务 问题? 我的心渐渐寒了,IT公司怎么这么没信誉呀? 关于安装qq的问题. 我看到有的文章发布系统里,有在word里直接粘贴就可以显示的JS,但我不会调用,谁知道? 一个很菜的问题 需要一个弹珠台游戏的设计思路,(windows自带的那个pinball游戏) windows 2000 中有多少中方法访问硬盘上的文件?? 文档不能删除的问题!请高手赐教,定重谢 Set object1 = object2 有关拷贝文件的问题? !!!!!!!!!如何让Memo新添加的一行使用colorbox1.selected,其他行不变????????? vb.net中的控件有無像vfp中parent屬性可以訪問上級對象?現在類中沒能訪問啊 excel一张表中最多可以保存多少行数据? javascript向jsp传递变量的问题 我想知道用tab来移动光标时突发的是什么消息?还有光标选中的虚线是怎么划的 ? 想改变单文档背景色在那个函数里设置?怎样设置? 有没有女孩对你说:”你真象我以前的男朋友!” 求救????????????? 求救????????????? 麻烦大虾看一下这几个错误,急急急!!!!!!!!!! C#中如何读取文本方式的整数向C++中的fscanf语句一样 高手帮忙 如何将Outlook Express的邮件转移到foxmail中去 如何插入图片到sql server中? 关于rave打印问题?(打印页码范围) 请教:在asp.net开发环境里,我用C#编写网站,为什么老是连接不上数据库SQL Server 2000 啊? SQL Server启动的一个问题 关于linux下解压缩的问题 非常奇怪的问题:href=question.jsp?a=&b=&c=123,当接收这些参数时,C的值为什么不是123,而是null!!! IIS菜鸟问题两个。IIS菜鸟问题两个。IIS菜鸟问题两个。IIS菜鸟问题两个。IIS菜鸟问题两个。 使用vc.net操作环境时常遇到的两个烦人问题. 硬盘低格后如何处理? 如何在图层上生成一个网络拓扑图,请高手给指点一下,多少分都行!!1 lihonggen0(李洪根,用.NET,标准答案来了) 请进来,我知道你在线~~~ 遇到除零错误怎么解决 treeview中的节点显示checkboxs和不显示checkboxs时,节点的句柄(Handle)不同,请高手帮忙 请教关于CDib中的问题 如何插入图片到sql server中? 能否用notes的客户端象foxmailo或outlook express一样收sina或sohu的信?跟domino服务器没关系。 excel一张表中最多可以保存多少行数据? 悉尼遭遇强降雨 城区多条公路被迫封(美国网络销售辱华面具与服饰 迎接万圣美国现实版越狱:4囚犯通过浴室天花板日本一轿车与赛马相撞 司机不治身亡报告称美国一年有500名少年儿童因枪阿富汗一婚礼客车遇袭爆炸 造成18人外媒分析耶伦若就任美联储下任主席 面巴武装分子向以色列发射火箭弹 其中一法国再出现鲨鱼袭击 男子冲浪遇险一条巴武装分子向以色列发射火箭弹 其中一印尼首都雅加达打击街头“面具猴”表演法国再出现鲨鱼袭击 男子冲浪遇险一条背景资料:格鲁吉亚\"当选总统\"吉外媒分析耶伦若就任美联储下任主席 面日本东电职员因短信骚扰女性被捕 称为美国网络销售辱华面具与服饰 迎接万圣快讯:嘉兴一在建工地坍塌4人被困 目浙江最后一座煤矿的前世今生 沧桑遗址互联网企业Logo为何被蓝色“占领”肯尼亚16岁少女遭6男子轮奸 嫌犯仅阿根廷执政联盟赢得议会中期选举平民化时代拥抱理性留学带着梦想出发因座位有限,请拨打400 0960 竞彩世界杯掀高潮 淘汰赛再送7辆sm苏州科技学院答考生问友新街道社区“爱心医疗队” 为老人建两车相撞一女被困 幸亏消防及时施救常熟理工学院:我们的家园婆婆为老公找了个女人生孩子扯块遮羞布,卫冕冠军“逃离”巴西南邮明天有通信电子类高招咨询会失眠、抑郁、焦虑寻求中成药治疗苏州大学答考生问扬子美女编辑小乔晒60天不重样早餐购买重疾险避免五大误区联想智能电视S9 轻松抛弃各种“盒子骗子来电称她窃水198万元包黑车往返沪宁线贩运海洛因脚跟轻甩破门时 今日方知我是我我的七彩童年看看书,挖挖地
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘