Создание перечисления в DELPHI

1

У меня есть коды перечисления в JAVA. Я конвертирую код JAVA в DELPHI.

Я почти закончил, но я застрял здесь. Я понятия не имею, как конвертировать enum в Delphi.

Мне интересно, этот код можно преобразовать в Delphi?

   /**
     * Enum describing the databin class ID's. Methods exist for getting the
     * KakaduClassID and the StandardClassID. I have also included the string
     * representations of the databins as defined for cache model updates.
     * 
     * 
     */
    public enum JPIPDatabinClass {

        /** Precinct data bin class. */
        PRECINCT_DATABIN(KakaduConstants.KDU_PRECINCT_DATABIN, JPIPConstants.PRECINCT_DATA_BIN_CLASS, "P"),

        /** Tile Header data bin class. */
        TILE_HEADER_DATABIN(KakaduConstants.KDU_TILE_HEADER_DATABIN, JPIPConstants.TILE_HEADER_DATA_BIN_CLASS, "H"),

        /** Tile data bin class. */
        TILE_DATABIN(KakaduConstants.KDU_TILE_DATABIN, JPIPConstants.TILE_DATA_BIN_CLASS, "T"),

        /** Main Header data bin class. */
        MAIN_HEADER_DATABIN(KakaduConstants.KDU_MAIN_HEADER_DATABIN, JPIPConstants.MAIN_HEADER_DATA_BIN_CLASS, "Hm"),

        /** Meta data bin class. */
        META_DATABIN(KakaduConstants.KDU_META_DATABIN, JPIPConstants.META_DATA_BIN_CLASS, "M");

        /** The classID as an integer as per the Kakadu library. */
        private int kakaduClassID;

        /** The classID as an integer as per the JPEG2000 Part-9 standard. */
        private int standardClassID;

        /**
         * The classID as a string as per the JPEG2000 Part-9 standard. Used for
         * cache model updates.
         */
        private String jpipString;

        /**
         * Constructor.
         * 
         * @param _kakaduClassID
         * @param _standardClassID
         * @param _jpipString
         */
        JPIPDatabinClass(int _kakaduClassID, int _standardClassID, String _jpipString) {
            kakaduClassID = _kakaduClassID;
            standardClassID = _standardClassID;
            jpipString = _jpipString;
        }

        /** Returns the classID as an integer as per the Kakadu library. */
        public int getKakaduClassID() {
            return kakaduClassID;
        }

        /** Returns the classID as an integer as per the JPEG2000 Part-9 standard. */
        public int getStandardClassID() {
            return standardClassID;
        }

        /**
         * Returns the classID as a string as per the JPEG2000 Part-9 standard. Used
         * for cache model updates.
         */
        public String getJpipString() {
            return jpipString;
        }

    };
  • 4
    То, как вы перенесете эту часть кода в Delphi, вероятно, зависит от того, как вы перенесете код, который ее использует. Не существует простого однозначного сопоставления между перечислениями Java и доступными средствами языка Delphi. Поэтому я лично не чувствую себя готовым дать вам совет, потому что я не знаю ваших мотивов дизайна.
  • 2
    Дэвид прав. Перечисления Java - очень сложная вещь, основанная на классах. Перечисления Delphi намного ближе к перечислениям C, за исключением того, что они безопасны от типов и поддерживают невероятно полезные наборы Pascal .
Показать ещё 1 комментарий
Теги:
enums

1 ответ

4
Лучший ответ

Этот Enum можно легко перевести на простой старый класс Delphi, который имеет конструкцию с тремя аргументами, такую как Java Enum, и три общедоступных свойства только для чтения.

JPIPDatabinClass = class(TObject)
private
  ...
public
  constructor Create(AKakaduClassID: Integer; AStandardClassID: Integer; AJPIP: string);

  property KakaduClassID: Integer; read FKakaduClassID;
  property StandardClassID: Integer; read FStandardClassID;
  property JPIP: string; read FJPIP;
end;

и "singleton style" экземпляры:

function PRECINCT_DATABIN: JPIPDatabinClass;
function TILE_HEADER_DATABIN: JPIPDatabinClass;
...

implementation

var
  FPRECINCT_DATABIN: JPIPDatabinClass;
  FTILE_HEADER_DATABIN: JPIPDatabinClass;
...
  FPRECINCT_DATABIN := JPIPDatabinClass.Create( ... );
  FTILE_HEADER_DATABIN := JPIPDatabinClass.Create( ... );
...  

function PRECINCT_DATABIN: JPIPDatabinClass;
begin
  Result := FPRECINCT_DATABIN;
end;

function TILE_HEADER_DATABIN: JPIPDatabinClass;
begin
  Result := FTILE_HEADER_DATABIN;
end;
...

Примечание: недостатком такого подхода является то, что он не создает реальные типы перечислений Delphi, он только эмулирует тип перечисления Java как непреложные объекты Delphi.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню