10

我的问题就像标题一样,ABAP运营商之间有什么=区别?=

4

4 回答 4

13

?=(向下)转换运算符。它用于引用变量之间的赋值,在运行时开始时就检查其可赋值性。

参见维基百科的一般解释。

例子:

DATA fruit TYPE REF TO zcl_fruit.
DATA apple TYPE REF TO zcl_apple. " inherits from zcl_fruit
DATA apricot TYPE REF TO zcl_apricot. " inherits from zcl_fruit

...

case fruit->type.
  when 'apple'.
    apple ?= fruit.
    seeds = apple->seeds.
  when 'apricot'.
    apricot ?= fruit.
    seeds = VALUE #( ( apricot->kernel ) ).
endcase.

从 7.40 开始,CAST可以使用构造函数运算符:

DATA fruit TYPE REF TO zcl_fruit.

...

case fruit->type.
  when 'apple'.
    seeds = CAST zcl_apple( fruit )->seeds.
  when 'apricot'.
    seeds = VALUE #( ( CAST zcl_apricot( fruit )->kernel ) ).
endcase.
于 2009-08-03T04:06:58.603 回答
1

?= 用于通过其继承的类对象来引用一个超类对象,形式为

[父类的对象引用] ?= [继承类的对象引用]

这在运行时发生类型解析时很有用。虽然 ?= 也可以为向上转换指定,但通常不是必需的。

于 2017-10-26T10:50:06.100 回答
0

它是用于引用变量之间赋值的 Casting operator (?=),但具体来说它是向下转换 operator 。

于 2016-04-22T11:18:51.573 回答
-3

?= 用于将继承类的对象引用类型转换为派生它的超类的对象。

?=

类型转换可帮助您引用仅在运行时解析类型的子类的多个对象引用。父类对象引用可以保存对象,并且通常会有一个父类的方法可以用来确定类型转换引用在运行时持有的子类对象。

于 2014-09-19T10:24:40.017 回答