当前位置: 首页 > 面试题库 >

示例代码详细说明了Ada和Java在键入方面的区别

佘俊茂
2023-03-14
问题内容

我试图考虑一个很好的例子,详细说明Ada的严格类型输入和Java的强类型之间的区别。有没有人有使用基于整数的值识别类型转换中这些差异的好例子?


问题答案:

从Ada的角度来看,这可能会有所帮助。

类型声明有两种基本形式:新类型和子类型。

即使新类型具有相同的值范围,它也被视为与任何以前的类型完全不同的类型。只能将新类型的对象分配给新类型的变量,依此类推。

子类型是从现有类型派生的,共享其值的子集,就分配而言,它被视为实质上是同一类型。

使用类型系统的技巧需要一些实践,而这是在类型和子类型之间进行选择的一个重要方面。它使沮丧地打击类型系统与使程序简单而轻松地组合在一起之间有所区别。

  • 声明一个新类型,其值表示新的东西,不需要或不想与其他数量混合的东西。
  • 声明一个其值与现有事物相关的子类型。

一个示例:设想使建筑物自动化,包括其电梯系统:

type Floor is new Integer range -3 ..135;

有几个地下车库,一个地下室,0层是一楼(对于欧洲建筑而不是美国建筑!),其上方135层,使其比高耸的地狱高1层。

可以安全地将其作为一种新类型,因为几乎没有将Floor变量与其他变量混淆的危险,并且几乎不需要数学上将Floor与任何其他数量组合。升降机需要去那里,仅此而已。在这种情况下,将Floor作为新类型可以捕获一些错误,但是值得增加的安全性而不会带来痛苦。

使用类型或子类型作为数组索引和循环边界是一种使跨界访问变得不太可能的好方法。

Array(Floor) of ...
for f in Floor loop ...

如果确实需要将整数变量分配给Floor,则类型转换会向编译器和任何阅读此代码的人发出信号。

subtype Population is Natural range 0 .. 10000;

我们必须知道出于安全,防火,供暖或制冷要求以及其他目的而要占用建筑物的人数。它的范围在两端都有严格的限制:对于此建筑物,假定有超过10000名居住者被消防安全法规所禁止。

基本类型是自然类型(本身是Integer的子类型),而不是Integer,因为总体永远不能小于零。

但是,将“人口”设置为新类型可能会导致无休止的类型转换问题。使其成为子类型,例如,可以更轻松地在“热负荷”计算,电梯调度策略,用水预测中使用“人口”。

它是子类型而不只是Integer的事实仍然提供了有用的保护形式。虽然可以将整数分配给种群变量并在表达式中与它们混合,但是任何试图超出范围的值都将被标记为错误。如果在编译时无法检测到它们,则它们将在运行时引发异常。第10001位试图进入建筑物的人也将如此。

我将让Java专家解释在Java中实现这些策略的最佳方法。



 类似资料:
  • 问题内容: 尽管阅读了文档,这篇文章一篇文章,但我仍然无法正确理解。 有人可以提供有关1D和2D阵列的分步注释示例吗? 问题答案: 摆弄了一会儿后,我发现了问题,并将它们张贴在这里,希望对其他人有所帮助。 直观地,就像问“ 告诉我这个数组中的位置满足给定条件 ”。 它还可以用于获取满足条件的数组中的条目: 当是2d数组时,返回行idx的数组和col idx的数组: 与1d情况一样,我们可以用来获取

  • 本文向大家介绍java中的前++和后++的区别示例代码详解,包括了java中的前++和后++的区别示例代码详解的使用技巧和注意事项,需要的朋友参考一下 java中的前加加++和后加加++,有很多人搞的很晕,不太明白!今天我举几个例子说明下前++和后++的区别! 其实大家只要记住一句话就可以了,前++是先自加再使用而后++是先使用再自加! 前++和后++总结:其实大家只要记住一句话就可以了,前++是

  • 3 详细说明 ffmpeg的每个转换过程像下图描述的程序 _______ ______________ | | | | | input | demuxer | encoded data | decoder | file | ---------> | packets | -----+ |__

  • 问题内容: 我已经在Wikipedia上阅读了有关Atkin的Sieve的信息,但是目前Wiki受到限制。我一直在寻找有关Atkin的Sieve的高级解释,以及Java的示例。 谢谢。 问题答案: 您可能(并且可能确实)知道这里给出的有关质数,合成数和筛的一些基本思想,但是它们可能会使其他读者受益于理解算法的本质。这个答案有些危险地接近于等同于StackOverflow的数学范围,但是我觉得有必要

  • 本文向大家介绍搞定immutable.js详细说明,包括了搞定immutable.js详细说明的使用技巧和注意事项,需要的朋友参考一下 什么是Immutable Data Immutable Data是指一旦被创造后,就不可以被改变的数据。 通过使用Immutable Data,可以让我们更容易的去处理缓存、回退、数据变化检测等问题,简化我们的开发。 js中的Immutable Data 在jav

  • DataSet类详细说明 这个wiki条目集中于DataSet类的子类。此处未提到的ChartData的所有其他子类不提供任何具体的增强功能。 Line-, Bar-, Scatter- & CandleDataSet (下面提到的方法能被用在任何提到的DataSet类中) setHighLightColor(int color): 设置用来高亮显示的颜色。不要忘记使用getResources()