问题标签 [jsr363]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JSR 363 添加新单位
我正在使用JSR 363 的参考实现:来自 maven (tec.units:unit-ri) 的测量单位 API。
现在我必须添加一些单位,如茶匙、液量盎司等。
我扩展 Units 类以添加一个新单元,如下所示:
这似乎适用于转换,但“tsp”没有解析,那么如何将它添加到解析器?
我在添加华氏温度时遇到问题,例如:T(°F) = T(K) × 9/5 - 459.67
如何使用转换器执行此操作,还是必须扩展 UnitConverter 并创建自己的?
jsr363 - 使用 jsr 363 库在英里和公里之间进行单位转换
嗨,我是使用 jsr 363 进行单位转换应用程序的新手。任何人都可以帮助我使用 jsr 363 库(uni-api)在英里和公里之间进行转换
java - Java 度量单位库加法和减法返回不正确的值
我正在使用 JSR363 的参考实现。我已经尝试了很多变体,但我会以这段代码为例。
这将打印 503.0 m。显然有些地方很不对劲,这应该是 3.05 m。我很难相信这实际上是图书馆的一个错误,我希望有人能告诉我我错过了什么。
java - 基于jsr363创建经度类型
您将如何创建基于 JSR363 API 的经度类型?
例如,经度可以表示为 ]-pi,+pi] 弧度之间或 ]-180,180] 度之间的双倍。如果将 20 度添加到 175 度经度,则得到 -165 度。这意味着 add() 方法需要处理包装,但我不知道如何扩展当前的实现。
@cneller:是的,它会以某种方式实现 Quantity<Angle> ,但它可能很简单:
但这不适用于当前的实现,因为它在内部调用 Quantities.getQuantity(..),这是一种不了解经度的工厂。
java - JSR 363 的 UCUM 单元格式
我正在使用具有最新参考实现的 JSR 363“测量单位”:
我想以UCUM格式打印出“毫升”,即“mL”:
不幸的是,这给了我“毫升”,而不是来自 UCUM 的“毫升”。即使 JSR 363 规范(和源代码)在整个过程中都引用了 UCUM,UnitFormatService.getAvailableFormatNames()
但在 RI 上只给了我“ASCII”和“默认”,所以我不能使用getUnitFormat("UCUM")
JSR 363 规范提示我应该能够做到(如果只有有人会支持 UCUM)。
那么我在哪里可以获得UnitFormat
支持 UCUM 的 JSR 363 实现呢?
units-of-measurement - 升的 UCUM 表示
我对UCUM如何定义“升”的符号感到困惑。是的,我知道历史l
上已使用该符号,并且最近L
已被标准机构(参见例如 BIPM SI 第 8 版)添加为l
. 但我认为 UCUM 应该给我们一个单一的、明确的交换符号集。
但是更仔细地阅读 UCUM,我发现它提供了区分大小写和不区分大小写的符号版本。此外,我看到,为了区分大小写,“liter”被定义了两次,一次是区分大小写的符号,l
另一次是区分大小写的符号L
。所以我解释这个的方式是,如果你在一个区分大小写的环境中,实际上有两个升符号,l
和L
,它们都意味着同样的事情(有效地使符号不区分大小写——嘘!) .
因此,如果我对此的解释正确,则意味着如果程序支持 UCUM,即使它以区分大小写的方式这样做, _a UCUM 程序也必须始终将l
and解释L
为同义词,包括派生单位,例如ml
/ mL
。这是正确的解释吗?UCUM 是否强制我们对某些符号进行等价查找?
正确解释 UCUM 会对其实施产生直接影响。以 JSR 363(请参阅 JSR 363的 UCUM UnitFormat)为例,它取代了 JSR 275(声称支持 UCUM 但从未支持),后者已将 UCUM 支持拉到 Eclipse UOMo;阅读这个可怕的故事。所以我坚持使用 JSR 363 参考实现,它将毫升序列化为ml
. 那么当 UOMo 最终添加对 JSR 363 的 UCUM 支持时,它是否会认为m
“来自 JSR 363 RI 的序列化和来自 UCUM 的“mL”是可互换的?
Werner Keil 告诉我(在前面提到的线程中)UCUM 认为l
和L
是“两个不同的不同单位”。但是ucum.js 认为它们是相同的单位。
所以这是我的具体问题:我正在使用 JSR 363 RI 序列化单位,生产l
升。我更喜欢 UCUM 实现,但这就是现在可用的全部。如果我使用这个实现,它将使用l
而不是生成大量数据L
。当我的代码最终升级到 UCUM 实现时,它会认为当前序列化的l
数据等同于L
,还是认为数据与使用L
单位的数据不同?UCUM 规范说应该发生什么?
让我换一种方式问这个问题:假设我要编写自己的 JSR 363 的 UCUM 实现。如果我UnitFormat.parse(CharSequence csq)
解析l
and L
,结果应该unitLowercaseL.equals(unitUppercaseL)
返回true
还是false
根据 UCUM 规范和 JSR 363?
java - Jackson 模块签名阻止为自引用泛型类型添加序列化程序
我想为 JSR 363 添加一个自定义序列化器和反序列化器javax.measure.Quantity<Q extends Quantity<Q>>
,它基本上封装了一个“值”和一个“单元”。创建序列化器 ( extends JsonSerializer<Quantity<?>>
) 和反序列化器 ( extends StdDeserializer<Quantity<?>>
) 很容易。
但是注册它们并不容易。对于解串器,没关系;看签名:
请注意,反序列化器允许扩展泛型类型。所以我可以这样做:
但是序列化器是另一回事。查看其注册的签名:
哦,由于受限制的泛型类型而导致的痛苦。我不能做到这一点:
这是因为Quantity.class
永远不会给我一个Class<Quantity<Q extends Quantity<Q>>
。并且没有简单的转换,没有在模块方法中引入一些任意的泛型变量并使用杂技演员。即使这样也行不通:
我能做的最好的事情是让我的序列化程序类QuantityJsonSerializer<Q extends Quantity<Q>> extends JsonSerializer<Q>
,然后在模块中将其注册为原始类型:
呃,有多丑?但这是我能找到让它工作的唯一方法之一,我不得不通过更多的体操来消除警告。
当然SimpleModule.addSerializer()
,它的泛型参数可能会更灵活一些,类似于SimpleModule.addDeserializer()
?
我在这里报告这个问题是因为 Jackson 项目说要在这里报告错误 --- 而且我也在寻求更好的解决方法的想法。谢谢。
java - JSR 363:以分升为单位形成体积单位
格式化体积单位以毫升和厘升为单位可以正常工作,但无法以分升为单位。
此代码打印:
如何格式化体积单位“DECILITRE”以显示“dl”?
java - 如何使用 JSR-363 定义自定义单位(或预定义数量)“滚动”?
如何使用 JSR 363 定义一个名为 roll 的自定义单元?如何将其定义为长度的预定义数量,例如一卷总是 250 米?如果卷没有固定长度,我如何将其定义为完全独立的基本单元?
我正在使用tec.uom:uom-se:1.0.2
. 我尝试添加一个新单元,如JSR 363 添加新单元,但addUnit
方法是私有的,因此无法从扩展类中调用它。
java - 如何使用 Java Measurement API 更改单元上的标签?
问题介绍
我正在尝试使用Java Units of Measurement (JSR 363) 的这种实现。
我想改变几个提供的单位的行为。一个例子是DEGREE_ANGLE
,因此度数符号 (°) 被附加到任何 Quantity 被toString
'd 的末尾。就像现在一样,数量将打印6.1345983929 [rad?]
解决方案的尝试
我已经尝试了很多不同的方法来实现这一点,但似乎在其他示例中存在的一种方法AbstractSystemsOfUnits
(例如来自此用于度量单位实现的统一代码)是使用如下静态块:
我试图通过扩展我正在使用的实现Units
类来调整这个解决方案。
还有一个尝试使用这个扩展的简单测试:
给我115.157658975 [rad?]
问题
如何使用 JSR 363 API 更改单元上的标签?