在Java中将Ada联合类型转换为对象类
下图为在Java中将Ada联合类型转换为对象类,java,ada,Java,Ada,下图为AdaUnion类型(图) 如何将这种联合类型从Ada转换为Java中的Object?请帮帮我 这是代码 首先点击空格,通过定义枚举,然后将所有字段添加到同一对象来实现 class Figure { public enum Shape { Circle, Triangle, Rectangle }; public enum Colors { Red, Green, Blue }; Shape form; boolean Filled; Colors
Ada
Union类型(图)
如何将这种联合类型从Ada转换为Java中的Object?请帮帮我
这是代码
首先点击空格,通过定义枚举,然后将所有字段添加到同一对象来实现
class Figure {
public enum Shape { Circle, Triangle, Rectangle };
public enum Colors { Red, Green, Blue };
Shape form;
boolean Filled;
Colors color;
float Diameter;
int Leftside, Rightside;
float Angle;
int Side1, Side2;
}
对对象的操作只需要检查“窗体”的值就知道应该考虑哪些字段,以及哪些字段可以忽略。
现在,您已经将这个想法(无论多么粗略)翻译成Java,您可以应用您的Java知识来重复这个想法。我对指定这样的Ada记录(“联合”)的规范方法有疑问,我总是使用“变体记录”或“判别记录” 根据Ada上下文中的
Union
,Union是指变量记录声明+C约定Union
这是通过引用以下内容来实施的:
指定aspectUnchecked\u Union
以使值True
定义给定的鉴别类型和某些C Union之间的接口对应关系。
编辑:方面要求关联类型应给出一个表示,该表示不为其判别式分配空间
引用,OP记录声明不是一个并集
带有可变零件的记录类型示例:
请张贴代码,而不是代码的图片。考虑一个java <代码>类< /C> >属性,如“代码> java .Lang.BooLoe<代码> >代码> java .AWT .Cudio< <代码> >代码> java .AWT .Sturt< /Cuff>,然后请您的问题包含一个显示当前方法的内容,您还希望对您想要做的事情有一个更具体的说明。您提供的Ada示例不是一个Union,它在功能上与变体记录(您正在展示的)有很大不同。您可以在Java中模拟变量记录的某些方面,但了解Ada示例为您提供的Java中具体要模拟的功能是很重要的。该图像似乎是一个摘录,其中的一个讲座使用传统的联合进行了分析。完全脱离了OP的主题,第二个@trashgod链接结尾处的状态“与结构类型等效,您无法区分相同结构的类型(例如不同的速度单位,都是浮动)”。Ada2012或更高版本提供了一个非常好的特性,我称之为“维度分析”。基本上,它允许定义单位和映射的数字类型。Ada工具链将具有编译/执行时间类型和单元求解。此外,您还可以考虑将与艾达版本中的case语句中的成员变量对应的成员变量私有化,并使用GETSt/Stter来执行判别检查。尽管这完全取决于OP的实际需求,但尚未更新。
type T (Flag : Boolean := False) is
record
case Flag is
when False =>
F1 : Float := 0.0;
when True =>
F2 : Integer := 0;
end case;
end record
with Unchecked_Union;
32/2
X : T;
Y : Integer := X.F2; -- erroneous
type Device is (Printer, Disk, Drum);
type State is (Open, Closed);
type Peripheral(Unit : Device := Disk) is
record
Status : State;
case Unit is
when Printer =>
Line_Count : Integer range 1 .. Page_Size;
when others =>
Cylinder : Cylinder_Index;
Track : Track_Number;
end case;
end record;