创建不兼容的数字子类型

2024-03-31

在 Ada 中,可以创建不兼容的等效数字类型:

type Integer_1 is range 1 .. 10;
type Integer_2 is range 1 .. 10;
A : Integer_1 := 8;
B : Integer_2 := A; -- illegal!

这可以防止意外的逻辑错误,例如将温度添加到距离中。

在Java中是否可以做类似的事情?例如。

class Temperature extends Double {}
class Distance extends Double {}
Temperature temp = 20.0;
Distance distance = temp; // Illegal!

EDIT

我发现了一个不相关的问题与相关的答案 https://stackoverflow.com/questions/48938276/java-creating-a-pseudo-native-type。这使用注释和编译时的特殊处理器在发生此类分配时发出警告。这似乎是最轻松的方法——不需要特殊的类来承担开发和执行方面的惩罚。


由于您在 Java 中指定的原因,包装对象并不常见。但这是可能的。

而不是使用extends Double(这不起作用,因为Double是最终的)。您可以改为使用委托。

public class Distance {
    private double distance;
    // constructor, getter, setter
}

public class Temperature {
    private double temp;
    // constructor, getter, setter
}

那么下面的代码将会产生编译时错误。

Temperature temp = new Temperature(20.0);
Distance distance = temp; // Illegal!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建不兼容的数字子类型 的相关文章

随机推荐

  • 在 Spring Boot 应用程序的生产中使用 Tomcat

    作为 Spring Boot 的新手 我需要了解以下内容 因为我无法直接找到谷歌结果 他们在现实生活中真正使用哪些应用程序服务器来部署这些 Spring Boot 应用程序 Tomcat 真的被公司使用吗 如果是的话 他们是通过集群来实现的
  • 在 WCF 代理中实现 Ws 安全

    我已将基于轴的 wsdl 导入到 VS 2008 项目中作为服务参考 我需要能够传递安全详细信息 例如用户名 密码和随机数值 来调用基于轴的服务 我已经考虑过为 wse 做这件事 我知道世界讨厌它 那里没有问题 我对 WCF 的经验很少 但
  • 如何更新StackPanel的布局?

    问题是 如果您单击按钮并展开电话号码 堆栈面板和边框会展开 这很好 但如果您折叠它 堆栈面板和边框不会折叠
  • 使用 Robolectric 更改配置

    为了在配置更改时保留 AsyncTasks 我使用基于片段的解决方案和 setRetainInstance true 它托管每个 AsyncTask 并回调侦听 Activity 类似于此解决方案http www androiddesign
  • Typescript 属性“property”在类型“void | ”上不存在样本

    根据打字稿void is a 超类型 https www typescriptlang org docs handbook basic types html void of the null and undefined类型 因此 具有 vo
  • Silverlight 3.0 - 如何从 UserControl 访问 MainPage 控件值

    我需要从 MainPage 检索一些控件值到 UserControl 在此 UserControl 中 我需要能够获取 Frame ActualWidth 和 Frame ActualHeight 值 在本例中 Frame 元素位于 Mai
  • 如何在普通的非Android Java应用程序中使用NDK编译的JNI库?

    我有一个 JNI 库 供 Android 应用程序与 NDK 一起使用 我没有源代码 只是为某些拱门编译了 so 文件 我想在 64 位 x86 Linux PC 上的简单控制台 Java 应用程序中调用该库中的函数 我做了什么 我从 x8
  • Google Spanner 中的 TrueTime API 是什么?

    我多次尝试阅读该文档 但未能理解它 有人可以用通俗的语言解释一下吗 TrueTime 是 Google 提供的一个 API 可直接暴露时钟不确定性 相比标准日期时间库 https docs python org 2 library date
  • 如何取消使用锚标记放置的复选框的分组

    我们在文档中使用 AnchorTags 将签名元素放入 PDF 文档中 到目前为止 诸如 SignHere 之类的签名元素已按预期工作 每个签名只需单击一下 即可正确放入文档中 我们现在尝试使用 AnchorTags 将复选框添加到这些文档
  • 使用 GORM 在 MySQL 中获取 NULL 日期时间值

    我想获取最后一个 Visit details 行 其 out time 为NULL使用戈尔姆 NIL本身是一种类型 其中 VisitDetail OutTime 是mysql NullTime Code var visitDetail mo
  • 使用 OR 条件左连接两个 R 数据框

    Problem 我有两个数据框 我想使用三个非数字变量的条件语句来连接它们 这是我想要实现的伪代码版本 Join DF1 and DF2 on DF1 A DF2 A DF1 A DF2 B Dataset 这是创建两个数据框的一些代码 v
  • 使用 PHP 更新 AD 密码的问题

    您好 我编写了以下脚本来更新特定用户的密码
  • Apache Flink - 作业内部无法识别自定义 java 选项

    我已将以下行添加到 flink conf yaml 中 env java opts Ddy props path PATH TO PROPS FILE 启动 jobmanager jobmanager sh start cluster 时
  • 编译器优化导致程序崩溃

    我正在用 C Qt 编写一个程序 其中包含图形文件解析器 我用g 编译项目 在开发过程中 我不断比较有关优化和调试信息的不同编译器标志之间的低级解析器层的性能 以及 Qt 的调试标志 打开 关闭 qDebug 和 Q ASSERT 现在我面
  • 解析 NSURL mailto

    如何解析 mailto 请求 mailto email protected cdn cgi l email protection email protected cdn cgi l email protection subject This
  • 为什么 Python 将制表符视为 8 个空格?

    使用 4 个空格的制表符宽度已成为编程中的主要选择 那么为什么 Python 不将制表符视为 4 个空格而不是 8 个空格呢 这个设计决定有 技术 历史 其他 原因吗 感觉这可以让开发人员免于因缩进不一致而苦苦挣扎 由于Linux控制台中默
  • 使用请求方法登录Cypress

    我注册并登录用户 但是 当在测试中导航到身份验证后面的页面时 Cypress 失败并将我带回登录页面 从它的外观来看 before函数已成功执行 由 API 日志验证 这是我的代码 describe Dashboard page gt be
  • 切换到相同数据类型的对象后,DataTemplate 不刷新

    我有以下ControlTemplate
  • 如何在 Java 或 Python 中使用文件系统缓存?

    A 最近关于 Elasticsearch 的博客文章 http www elasticsearch org blog elasticsearch 1 4 0 beta released 网站正在谈论他们新的 1 4 beta 版本的功能 我
  • 创建不兼容的数字子类型

    在 Ada 中 可以创建不兼容的等效数字类型 type Integer 1 is range 1 10 type Integer 2 is range 1 10 A Integer 1 8 B Integer 2 A illegal 这可以