为什么Java不支持结构? (只是出于好奇)

前端之家收集整理的这篇文章主要介绍了为什么Java不支持结构? (只是出于好奇)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道你可以使用公共领域或其他一些解决方法.或许你根本不需要它们.但出于好奇,为什么Sun离开了建筑物.

解决方法

虽然 Java可以支持任意多种类,但Runtime只支持一些变量类型:int,long,float,double和reference;另外,Runtime只识别一些对象类型:byte [],char [],short [],int [],long [],float [],double [],reference []和非数组对象.系统将为每个引用变量或数组实例记录类类型,Runtime将执行某些检查,例如确保存储到数组中的引用与数组类型兼容,但此类行为仅将对象类型视为“数据” ”.

我不同意类的存在消除了对结构的需要的主张,因为结构具有与类对象根本不同的语义.另一方面,从运行时系统设计的角度来看,添加结构会使类型系统变得非常复杂.在没有结构的情况下,类型系统只需要八种数组类型.向类型系统添加结构将要求类型系统识别任意数量的不同变量类型和数组类型.这样的认可是有用的,但Sun认为这不值得复杂.

考虑到Java的运行时和类型系统运行的限制,我个人认为它应该包含有限形式的聚合类型.其中大部分都是由语言编译器处理的,但是在运行时需要一些功能才能真正运行.鉴于声明

aggregate TimedNamedPoint
{ int x,y; long startTime; String name; }

像TimedNamedPoint tpt这样的字段声明;将创建四个变量:tpt.x,类型为int的tpt.y,long类型的tpt.startTime和String类型的tpt.name.声明该类型的参数的行为类似.

要使这些类型有用,运行时需要一些小的补充:有必要允许函数在返回时在堆栈上留下多个值,而不是简单地使用五个主要类型中的一个返回值.另外,有必要有一种在阵列中存储多种东西的方法.虽然这可以通过创建声明为TimedNamedPoint [12]的东西来实现,但实际上是一个Object [4],它将被初始化以识别int [12],long [12]和String [12]的两个实例.,最好有一种方法,通过这种方法,代码可以构造一个单独的数组实例,可以容纳24个int类型的值,12个long类型的值和12个String类型的值.

就个人而言,我认为对于像Point这样的东西,简单聚合的语义会比类更清晰.此外,缺少聚合通常使得具有可以同时返回多于一种信息的方法变得不切实际.在许多情况下,有可能让方法同时计算和报告传入角度的正弦和余弦,其工作量比单独计算两者所需的工作少得多,但必须构造SineAndCosineResult对象实例会否定这样做可以获得任何速度优势.执行模型不需要改变太多以允许方法在返回时在评估堆栈上留下两个浮点值,但是目前不支持这样的东西.

原文链接:https://www.f2er.com/java/127680.html

猜你在找的Java相关文章