【问题标题】:Creating an enum in DELPHI在 DELPHI 中创建枚举
【发布时间】:2015-03-13 09:20:43
【问题描述】:

我在 JAVA 中有一个枚举代码。我将所有 JAVA 代码转换为 DELPHI。

我几乎完成了,但我卡在了这里。我不知道如何将枚举转换为 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;
        }

    };

【问题讨论】:

  • 如何将这部分代码移植到 Delphi 可能取决于您如何移植使用它的代码。 Java 枚举和可用的 Delphi 语言工具之间没有简单的一对一映射。所以我个人觉得没有能力给你建议,因为我不知道你的设计动机。
  • 大卫是对的。 Java 枚举是一个非常复杂的东西,基于类。 Delphi 枚举更接近于 C 枚举,除了它们是类型安全的并且支持非常有用的 Pascal sets

标签: java delphi enums


【解决方案1】:

这个 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;

和“单例样式”实例:

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 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多