Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在编译时对Java`int`强制使用度量单位?_Java_Primitive_Units Of Measurement - Fatal编程技术网

在编译时对Java`int`强制使用度量单位?

在编译时对Java`int`强制使用度量单位?,java,primitive,units-of-measurement,Java,Primitive,Units Of Measurement,有没有办法在编译时将“度量单位”的概念强加于Javaint,但在运行时不使用对象引用 在Java代码中,我想保护开发人员在组合基本数据类型时避免混合度量单位,例如在这个错误中 int duration1 = 17; // Number of **seconds**. int duration2 = 42; // Number of **minutes**. int total = duration1 + duration2; // <== MISTAKE: Mixed u

有没有办法在编译时将“度量单位”的概念强加于Java
int
,但在运行时不使用对象引用

在Java代码中,我想保护开发人员在组合基本数据类型时避免混合度量单位,例如在这个错误中

int duration1 = 17;    // Number of **seconds**.
int duration2 = 42;    // Number of **minutes**.
int total = duration1 + duration2;    // <== MISTAKE: Mixed units of measure!
在上面的代码中,编译器会抱怨第三行,因为类DurationSec和DurationMin之间没有自动转换,即使这两个类都基于
int

第三行(在我的想象中)可能写得正确,如

是的,我意识到这可以通过类来实现,但是我需要
int
本机数据类型的性能,所以我不想引入对象引用的开销。我只想将
int
封装在精简的编译时类中

有什么想法吗?

Java中是否有一个晦涩难懂的新特性可以执行编译时检查,同时不会给代码和运行时增加任何(或微不足道的)开销


有没有一种方法可以告诉Java优化所有的对象开销,并且只处理
int

使用类在性能方面可能没有您认为的那么差。在Java中不可能这样做,您唯一的选择是进行良好的单元测试。如果这个特性对你很重要,那么你可以考虑一种不同的语言。此外,我将尝试使用对象包装器并测试性能,以确定是否确实需要使用基本值。如果没有明显的区别,我会选择额外的类型安全性,而不是节省几微秒。这是过早的选择,还是您分析了类似于
java.time.Duration
的内容,并确定性能不适合您?我理解您的问题,但坦率地说,如果您需要,您的开发人员并不优秀。“inttotal=durationnsec+durationnmin”这一行毫无意义,纯粹而简单。这不是语言限制。如果您对此感到担忧,那么为什么不担心项目中的所有其他INT呢?您希望Java中有一个特性,允许您为每个可能的整数创建一个单独的int类型吗?在我的情况下,我认为这是一个编译时问题,所以我正在寻找一个纯编译时的解决方案。在我的家乡,我们计算CPU周期,所以如果它对运行时有任何影响,我可能无法实现。唉,不管怎样,我不征求你的意见是不对的,不使用类在性能方面可能没有你想象的那么糟糕。在Java中不可能使用,你唯一的选择就是进行良好的单元测试。如果这个特性对你很重要,那么你可以考虑一种不同的语言。此外,我将尝试使用对象包装器并测试性能,以确定是否确实需要使用基本值。如果没有明显的区别,我会选择额外的类型安全性,而不是节省几微秒。这是过早的选择,还是您分析了类似于
java.time.Duration
的内容,并确定性能不适合您?我理解您的问题,但坦率地说,如果您需要,您的开发人员并不优秀。“inttotal=durationnsec+durationnmin”这一行毫无意义,纯粹而简单。这不是语言限制。如果您对此感到担忧,那么为什么不担心项目中的所有其他INT呢?您希望Java中有一个特性,允许您为每个可能的整数创建一个单独的int类型吗?在我的情况下,我认为这是一个编译时问题,所以我正在寻找一个纯编译时的解决方案。在我的家乡,我们计算CPU周期,所以如果它对运行时有任何影响,我可能无法实现。唉,不管怎样,我不征求你的意见是不对的,不是吗?
DurationSec duration1 = 17;      // Number of seconds.
DurationMin duration2 = 42;      // Number of minutes.
DurationSec total = duration1 + duration2;    // <== COMPILE ERROR!
DurationSec total = duration1 + (DurationSec) (60 * (int) duration2);  // OK