在Java中将Ada Union类型转换为Object类

时间:2018-12-26 05:22:09

标签: java ada

下面的图片是Ada联合类型(如图)。

如何在Java中将此Union类型从Ada转换为Object?请帮助我。

这是代码

screen shot

2 个答案:

答案 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;