我怎样才能代表一个更“真实”的人;复杂的;ABAP中的构造函数?

我怎样才能代表一个更“真实”的人;复杂的;ABAP中的构造函数?,abap,Abap,我有一些Java代码,我想转换成ABAP。我很难处理属性和构造函数声明/实现 如何在ABAP中表示下面的Java代码 class Node { private String data; private Node[] children = new Node[0]; private Node parent = null; public Node(String data) { this(data, null); } public No

我有一些Java代码,我想转换成ABAP。我很难处理属性和构造函数声明/实现

如何在ABAP中表示下面的Java代码

class Node {
    private String data;
    private Node[] children = new Node[0];
    private Node parent = null;

    public Node(String data) {
        this(data, null);
    }

    public Node(String data, Node child) {
        this.data = data;
        if (child != null) {
            this.addChild(child);
        }
    }
}
你不能“完全”做你想做的事。ABAP不像大多数OO语言那样是完全多态的。
您不能有两个具有不同签名的构造函数。
您可以使用带有可选参数的构造函数,并得到非常类似的结果。

试一试,看看你在管理什么,然后再发布一次。

这是你能得到的最接近的:

CLASS node DEFINITION
  PUBLIC CREATE PUBLIC.

  PUBLIC SECTION.
    METHODS constructor
      IMPORTING
        data TYPE string
        child TYPE REF TO node OPTIONAL.

  PRIVATE SECTION.
    DATA data TYPE string.
    DATA children TYPE STANDARD TABLE
      OF REF TO node WITH EMPTY KEY.
    DATA parent TYPE REF TO node.

ENDCLASS.

CLASS node IMPLEMENTATION.

  METHOD constructor.
    me->data = data.
    IF child IS BOUND.
      INSERT child INTO TABLE children.
    ENDIF.
  ENDMETHOD.

ENDCLASS.

ABAP不支持重载,这意味着您不能有一个方法的多个变量以及不同的输入参数集。

如果您有多个变量用于构造,并且希望阻止可选参数,请允许我加入另一个选项:

CLASS node DEFINITION
  PUBLIC CREATE PRIVATE.

  PUBLIC SECTION.
    CLASS-METHODS create_with_data
      IMPORTING
        data TYPE string
      RETURNING
        VALUE(result) TYPE REF TO node.
    CLASS-METHODS create_with_data_and_child
      IMPORTING
        data TYPE string
        child TYPE REF TO node
      RETURNING
        VALUE(result) TYPE REF TO node.

  PRIVATE SECTION.
    DATA data TYPE string.
    DATA children TYPE STANDARD TABLE
      OF REF TO node WITH EMPTY KEY.
    DATA parent TYPE REF TO node.
    METHODS constructor
      IMPORTING
        data TYPE string
        child TYPE REF TO node OPTIONAL.

ENDCLASS.

CLASS node IMPLEMENTATION.

  METHOD create_with_data.
    result = NEW #( data = data ).
  ENDMETHOD.

  METHOD create_with_data_and_child.
    result = NEW #(
      data = data
      child = child ).
  ENDMETHOD.

  METHOD constructor.
    me->data = data.
    IF child IS BOUND.
      INSERT child INTO TABLE children.
    ENDIF.
  ENDMETHOD.

ENDCLASS.

请首先,我已经看到,用一个更简单的构造函数也可能做到这一点。我将尝试它是否有效。有关详细信息,请参阅ABAP文档:。。。