下面的图片是Ada
联合类型(如图)。
如何在Java中将此Union类型从Ada转换为Object?请帮助我。
这是代码
答案 0 :(得分:0)
首先要对空间进行打击,然后通过定义枚举来实现这一点,然后将所有字段添加到同一对象中。
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;
}
对该对象的操作只需检查“ form”的值即可知道它们应考虑的字段以及要忽略的字段。
现在,您已经将 idea (无论如何粗略)翻译成Java,则可以将您的Java知识应用于该想法。
答案 1 :(得分:0)
我对指定此类Ada记录(“联合”)的规范方式有疑问,我总是使用“变体记录”或“区别记录”。
在Ada上下文中,根据https://en.wikibooks.org/wiki/Ada_Programming/Types/record#Union Union
指的是变量记录声明+ C约定并集。
这是由ARM §B.3.3强制引用的:
将方面
Unchecked_Union
指定为值True
定义给定的区分类型和某些C联合之间的接口对应。
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
引用ARM § 3.8.1,OP记录声明不是一个联合。
带有变体部分的记录类型示例:
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;