写点什么

JSR-275:单位和计量

  • 2007-10-17
  • 本文字数:1093 字

    阅读完需:约 4 分钟

JSR-275:单位规范》的目标是为 Java 软件开发增加计量单位的支持,以期能减少某些类型的错误。该规范的领导之一 Jean-Marie Dautelle 为我们介绍这个 API:

不恰当的物理测量模型会导致严重的程序设计错误。特别是将计量建模成单纯的数字而不管其代表的单位,会产生出脆弱的代码。其他开发者或者代码的其他部分都可能会错误地把数字看成代表其他计量单位。例如,一个人的重量数字的单位到底是磅、千克还是英石,并不容易看出来。这个问题很难通过测试来解决,而且已经给社会造成了数以百万计的金钱损失。(NASA 损失了价值 $1.25 亿的火星探测器,就因为 Lockheed Martin 的工程师使用英制单位,而 NASA 的工程师使用更适合关键太空任务的公制单位。)

JSR-275 引入了一个新的 javax.measure 包,其中包含一个 Measurable 接口和一个 Measure 类。

Measurable 表示一个属性可被量度(例如海拔、高度等),且给定一个相容的单位,可取得该属性的值:

复制代码
Measurable<length> height = person.getHeight();
<br></br>
long inches = height.longValue(NonSI.INCH);
<br></br>

Measurable 用泛型来保证类型安全;如果传递一个 Measurable对象到一个接受 Measurable 参数的方法,就会产生编译错误:

复制代码
Measurable<mass> weight = person.getWeight();
<br></br>
person.setHeight( weight ); // error!
<br></br>

Measure 代表一个具体的计量,是一个数字值和一个具体单位的结合。一个可计量的值(如 geoffreyWiseman.getHeight())可有不同的表示(如 Measure.valueOf(73,NonSI.INCH)、Measure.valueOf(1.8542,SI.METRE)) 。

API 中还包括了量的表示(quantities)(如质量、高度、功率、压力),用来参数化计量的泛型表示;单位(INCH、METER 等)被置于单位系统中。SI 表示公制,包括单位以及前缀(METER、KILO(METER) 等);NonSI 包含了不属于公制的常用单位(日、英尺、节等)。

可以用 UnitConverter 来转换同一量纲的单位。它可以解析和格式化带单位的数值,甚至包括含有不同单位的复合表示,如英尺和英寸、时分秒。这个 API 是可扩展的,支持创建新的单位、单位系统以及量的表示。

有些讨论谈及 JSR-275 来支持 JSR-310(日期 / 时间 API),这个主题还有待深入。Stephen Colebourne 在《 JSR-275: Suitable for Java 7? 》中指出日期 / 时间单位在转换中不具备科学单位的一致性:

呃,我们怎样精确地在月和日之间转换?这种转换到底是什么意思?我姑且猜测,它是将 1 年定义为 365 日 5 小时 49 分 12 秒,然后定义 1 月是其 1/12。然后根据这个数据进行月与日之间的转换。

更详细的信息请查阅规范或者参考实现

查看英文原文: JSR-275: Units and Measures Introduced

2007-10-17 14:21659
用户头像

发布了 225 篇内容, 共 55.0 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

五分钟!搞懂 MySQL主从复制原理,还不会算我输

Java 程序员 后端

京东4面(Java研发):事务隔离,java程序设计案例教程机械工业出版社

Java 程序员 后端

京东热-key-探测框架新版发布,单机-QPS-可达-35-万

Java 后端

为什么一个还没毕业的大学生能够把 IO 讲的这么好?

Java 程序员 后端

架构实战营模块二作业

孙志强

架构实战营

【Flutter 专题】22 图解 PopupMenu 那些事儿

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

不会吧不会吧?字节“百万级,nginx视频教程吾爱破解

Java 程序员 后端

产品经理必懂的技术那点事儿(中),mybatis基本工作原理

Java 程序员 后端

不是吧,就因为他和面试官多聊了半个小时红黑树,进了腾讯

Java 程序员 后端

主动学习微服务架构深度解析:微服务的采用前提,微服务使用场景

Java 程序员 后端

二、docker 镜像容器常用操作(让我们用docker 溜得飞起)

Java 程序员 后端

五位阿里大牛联手撰写的《深入浅出Java多线程》

Java 程序员 后端

三面阿里云斩获offer:微服务+Redis,积累总结

Java 程序员 后端

不是吧阿sir,你这多线程并发也太熟了吧,震惊面试官第四年

Java 程序员 后端

不错,这么好的东西不白嫖也太可惜了!阿里内部首发

Java 程序员 后端

为什么不想做Java了,6年经验去面试10分钟结束,现在Java面试怎么这么难

Java 程序员 后端

五、redis配置信息以及常用命令,java语言程序设计基础篇第十一版pdf

Java 程序员 后端

上线半天下载量破100W!阿里内部微服务进阶笔记,超详细

Java 程序员 后端

不是吧阿sir,你这Redis太熟了吧,震惊面试官第六年

Java 程序员 后端

世界顶级SQL技术专家呕心沥血半年才整理出这份:SQL优化核心思想笔记,手慢无

Java 程序员 后端

000|发刊词:与技术世界保持链接

棒棒彬👻

技术 知识分享

三面遭阿里新微服务框架暴锤,含恨吃透这份手抄本笔记,终入阿里

Java 程序员 后端

上线半天下载量破100W!美团大佬的Java性能调优实战手册,超详细

Java 程序员 后端

不到30岁开上兰博基尼的程序员,为什么这么强,他告诉我只需要把多线程搞好你也行

Java 程序员 后端

五分钟搞懂spring-cloud-square,linux服务器开发需要的技术

Java 程序员 后端

两年JAVA程序员的面试总结,mysql索引原理

Java 程序员 后端

为什么不想做Java了, 现在Java面试怎么这么难,从自身找原因

Java 程序员 后端

云服务器下centos7,nginx面试题

Java 程序员 后端

不要再本地启动项目调试了,试SpringBoot远程调试你会发现新大陆!

Java 程序员 后端

为了面试阿里巴巴、腾讯、字节跳动,linux内核架构

Java 程序员 后端

为什么我不建议你用阿里巴巴Java规范,而使用 Google Guava 编程?

Java 程序员 后端

JSR-275:单位和计量_Java_Geoffrey Wiseman_InfoQ精选文章