На рисунке ниже показан тип соединения Ada (рисунок).
Как я могу преобразовать этот тип Union из Ada в Object в Java? Пожалуйста помогите.
Это код

Вы также хотите быть более конкретными в том, чем вы хотите заниматься. Пример Ada, который вы предоставляете, не является Union, который по функциям сильно отличается от вариантной записи (которую вы показываете). Вы можете эмулировать некоторые аспекты вариантной записи в Java, но было бы важно знать, какие функции конкретно вы хотите эмулировать в Java, которые предоставляет вам пример Ada.
Изображение похоже на отрывок из CS 354, лекция которого исследует вопросы дизайна с традиционными союзами.
Совершенно не по теме OP, вторая ссылка @trashgod в конце утверждает: «При эквивалентности структурных типов вы не можете различать типы одной и той же структуры (например разные единицы скорости, оба плавают)». Ada 2012 и выше предоставляет очень приятную функцию, которую я бы назвал «анализом измерений». По сути, он позволяет определять как единицы, так и отображаемый числовой тип. Тогда инструментальная цепочка Ada будет иметь решение блока и типа времени компиляции / выполнения. Более подробный обзор здесь adacore.com/gems/gem-136-how-tall-is-a-kilogram




Начните с использования места и реализации этого, определив перечисления, а затем добавив все поля к одному и тому же объекту.
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', чтобы знать, какие поля они должны учитывать, а какие игнорировать.
Теперь, когда вы перевели идея (хотя и приблизительно) на Java, вы можете применить свои знания Java для повторения идеи.
Вы также можете сделать частные переменные-члены, соответствующие переменным в операторе case в версии Ada, и использовать геттеры / сеттеры для принудительной проверки дискриминанта. Хотя все зависит от реальных требований OP, которые не обновлялись.
У меня есть сомнения относительно канонического способа обозначения таких записей Ada («союзов»), я всегда использовал «вариантную запись» или «дискриминантную запись».
Согласно https://en.wikibooks.org/wiki/Ada_Programming/Types/record#UnionUnion в контексте Ada относится к объявлению вариантной записи + объединение соглашения C.
Это обеспечивается ARM §B.3.3, цитируя:
Specifying aspect
Unchecked_Unionto have the valueTruedefines an interface correspondence between a given discriminated type and some C union. EDIT: The aspect requires that the associated type shall be given a representation that allocates no space for its discriminant(s).
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 НЕ является объединением.
Example of record type with a variant part:
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;
Пожалуйста, разместите код, а не картинки кода. Рассмотрим Java
classс такими атрибутами, какjava.lang.Boolean,java.awt.Color,java.awt.Shapeи т. д. Затем, пожалуйста, редактировать ваш вопрос, чтобы включить минимальный воспроизводимый пример, который показывает ваш текущий подход.