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

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实例是相等的。
借助三大技巧 助你提升API状态页面 集成GemFire,Hadoop生态圈的又一把火 次世代光照体验:Unity 5面世,功能系统全升级 深入浅出,以咖啡店为例演示Web应用程序扩展 百度Clouda:可依赖的实时JavaScript开发框架 Oracle发布Java 8正式版及JDK 8 编程语言中一些令人抓狂的规则 廉颇未老,微软股价创14年新高 中国云计算大会PPT集萃(三):核心架构及应用实践 特性是增多了,但是Google的云服务仍然不温不火 全国云计算大数据创新项目评选活动正式启动 【独家专访】Perl发明者首次来华:将在OSTC大会分享其编程人生 腾讯核心创始人张志东半年后卸任首席技术官 改任终身荣誉顾问和学院讲师 咱们约会吧,Web设计师教你不一样的语言 开发者不容错过的10款免费JavaScript游戏引擎 付费授权、开放源码,全新虚幻引擎4正式发布! Larry Page未来计划:用科技创造美好生活 AWS 8周年,收入超四主要对手之和 分析:北京网络广播电视台私有云实践 腾讯云总经理陈磊分享微信云三步曲 十大技术,十家机构,从行业制高点一览大数据 【OSTC讲师专访】严旭:文艺豆瓣也很开源 大姨吗携手睿仁医疗 推智能体温贴Raiing 三个火枪手将重袭传统零售业 网易王健宗:革命Hadoop,Spark带来百亿市场价值! MediaTek高级总监Chien-Ping Lu:HSA在下一盘大棋 Docker一周岁生日快乐 虚拟现实,正在改变什么? 一周消息树:腾讯CTO张志东离职 未来希望帮技术人成长 又见真人CS:13th Lab推出移动FPS对战平台 前瞻、教育、创业:Maker Faire演讲嘉宾揭晓 wsad5 怎么连上ORACLE数据库啊 并非复古——关于微内核模式ASP开发框架的讨论,欢迎高手进入! 那有BOCHS的中文帮助 我愿送500分求解JAVA问题!!!!!! 关于frame里面的参数传递问题,火急 find函数的问题,请各位老兄帮忙 请问这个链接怎么写? 用xsl将xml转成html提示.... 为什么看不到邻近计算机? 关于浏览器的自定义工具栏! 无法打开web项目bbs 请告知可以下载Domino数据库安装文件和Lotus Notes的网址!在线等 我的ie6无法加载applet,请教解决方法! 如何用ASP写关闭当前窗体的代码? 用xsl将xml转成html提示.... sqlserver数据库怎么和应用程序一起打包? 一个困惑的问题,高手和有耐心的人请进! 实现要求是:对一个用来保存文件的richtext域如何创建一个代理,以实现每天固定一个时间从服务器/本地的一个固定目录下获取一个更新的文 关于数据库导入导出的问题 请问:提交表单后,把参数传到一个新弹出的页面,要求此页面没有“标准按钮”“工具栏”“地址栏”而且固定窗口大小,且不能最大化,如何 求助于高手:Tab Control控件如何使用? 组件通过鼠标移动 求助 sniffer 紧急!帮忙啊!如何获得使用<div class="test" id="mydiv"> ...</div>定义的对象 哪儿找ORACLE8i 9i for x86solaris? 在IIS中,url转发如何隐藏真实地址? 原来对应Access数据库的水晶报表现在如何转换成对应sql server 的?Access数据库已经转换成Sql server的 找到了工作,不过得告别DELPHI一段时间了本来想在非技术区发这个,但是我在这里得到的帮助最多所以...... 在web页面中如何使用脚本判断当前是否有键被按下? 哈希表 访问CLOB字段问题 下拉列表的查询 一台电脑安装的winxp系统,当我打开“任务管理器”时,只显示所调用的进程及结束进程的按钮,其它的应用程序及性能界面都不能出现,最上 Repeater模板列:如何在返回字段长度过长时,将其截短 谁能帮我做一个祝贺教师节日的卡通图片 intaweb 的session 超时错误捕捉问题 大家帮忙看一下C++primer上面的这个程序: 简单SQL命令问题。。。。 蓝天,ChangeCell事件在WIN2000下正常,在WIN98下出现非法操作错误??? 请问:使用database对象打开有密码的Access数据库问题? 各位高手,请进来看看吧!关于dbexpress的问题 请各位XDJM帮我想个书店的名字,是我弟弟要在我们县开个主要经营考试图书的书店,请大家想个名字,不胜感激 知道PHP的crypt()生成的密文,如果用JAVA校验明文是否正确? 如何分割图片? 关于一个窗体事件的小问题,分不多,100而已 无法备份数据库???事不是我做这个操作弄坏数据库了?? office xp只装frontpage,在打开frontpage 时有总有错误的问题? 有关图标文件的问题!急,在线等待 JTree用加减号来展开和收缩子节点,如何实现? 请问怎么把两个表中的数据连在一块输出 JTree用加减号来展开和收缩子节点,如何实现? 已知在边长为12的正方形ABCD中有两个动点P,Q同?已知在边长为12的正方形ABCD中,有两个动点P,Q同时从A点出发沿正方形边AB、BC、CD、DA方向运动,若点P的运动速度为每秒3个单位,点Q的运动速度为每 作文 春游前的喜悦别复制啊!跪求! 杏林春满 翻译 作文 春游前的喜悦跪求!求求哥哥姐姐,说下! 作文 春游前的喜悦复制的别来!复制的别回答! 这个第二题怎么裂项 解出来结果 用电子打火机里面的打电器可不可以使二极管或其他一些灯泡之类的!使他们发光或一闪一闪的也行?求专家回答!电压高可以在中间加电阻吗?没有回路接地可以吗?我只是想让它亮起来! 受人尊敬的有哲理的故事RT,需要一些故事,不能太长,像一些寓言啦什么的~ 哲理小故事 郗这个字在姓氏里读什么? 小功率开关三极管用什么?要求输出电压最大4V,我负载是带发光二极管的,灯不要串联要并联 伊朗就核问题对话提出新建议内蒙古国贫旗现豪华接待中心 回应称为25省区市前三季度GDP之和超全国总专家称当代难谈“汉字危机” 呼吁重视“今日中国”艺术周系列活动在泰国举行西班牙煤矿瓦斯泄漏致6人死亡印度央行下调经济增长预期企业被强拆讨说法遭踢皮球 对方扬言:美国在罗马尼亚反导基地开工建设孟全国大罢工第二天又有4人死亡长兴废旧铅蓄电池“涅槃重生” 废水处擅自操作机械车位 卡坏别人车赔八千多进犯连云港,日军登陆被赶回海里遇上情感骗子,切忌再给机会万达茂周末再推480套房源专家推荐阿根廷vs哥伦比亚首发:梅西搭档阿圭深圳地铁施工坍塌被困者已救出 工地停突尼斯酒店遭武装袭击 至少27人死亡法国欲给阿桑奇和斯诺登提供庇护 以“希腊总理:7月5日公决拟与国际债权人来湘创作瓷板画
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘