Abap 例外情况CX_SY_REF_是初始的

Abap 例外情况CX_SY_REF_是初始的,abap,Abap,我正在设置一个类的方法调用 DATA: r_info TYPE REF TO zcl_sv_job_offline_ctrl. CALL METHOD r_info->create EXPORTING is_data = lr_test_record. 以及接收以下错误: CX_SY_REF_IS_INITAL You are trying to access a component with a 'ZERO' object reference (p

我正在设置一个类的方法调用

DATA: r_info TYPE REF TO zcl_sv_job_offline_ctrl.


 CALL METHOD r_info->create
    EXPORTING
         is_data   = lr_test_record.
以及接收以下错误:

CX_SY_REF_IS_INITAL

You are trying to access a component with a 'ZERO' object reference (points to nothing). Variable: "R_INFO".

我遗漏了什么吗?

您遗漏了创建对象的步骤。 因此,您需要:

创建对象r\u信息。

r\u info=new zcl\u sv\u job\u offline\u ctrl()。

或者如果存在“工厂方法”(您的“创建”方法指示的内容)

r\u info=zcl\u sv\u job\u offline\u ctrl=>create(is\u data=lr\u test\u record)。


异常告诉您引用(r_info)未与堆上的对象连接。因此,您需要执行上述步骤中的一个,然后它就会工作。(取决于您的班级)

对不起,我还没有代表对此发表评论。。。 我注意到您的类是Z,所以我想知道您是否正在尝试创建一个单例类。在这种情况下。您的“创建”应该是静态的。您的构造函数为private,实例为private属性
从其他评论中,我同意,您的问题缺少一些关键细节,无法提供准确答案。
如果
IO\u DISPATCHER
是构造函数的一部分,并且无法传递值,则需要深入了解类的用途。看看你能不能给它想要的。尝试“where used”并查看该类的其他用法。你可能会发现你在看错误的班级,或者至少是从错误的方向靠近。
如果
create
是类上的某个方法,并且它不是静态的,那么在创建类的实例之前,您将永远无法让它工作。

我想到的另一个想法是,你可能在正确的地方,只是做了错误的事情。检查您的全局,查看是否已经存在该类的实例,并且您正试图通过声明作为数据而不是使用全局实例来访问某些内容?? 所有猜测都没有更多细节。

谢谢大家


解决方案只是(正确地)实例化父类,使我能够实例化有问题的类。

不幸的是,我无法创建对象(没有向强制参数“IO\U DISPATCHER”传递任何值)。此外,该方法是一个重新定义,因此=>不起作用。在您的问题中,这个神奇的
IO\u DISPATCHER
在哪里?在您的示例中,您声明了一个引用
r\u info
,然后对其调用一个方法而不实例化,因此Sasku的答案是正确的。我们不知道您类的整个定义。尤其是我们没有构造函数的定义。据我所见,错误消息显示,在创建对象时,您需要向参数io_dispatcher传递一些信息(在构造函数中也是如此)。我建议您看看ABAP-OO和构造函数是如何创建对象的(以及如何创建对象)工作。您可以在sap press book中找到一些内容。在SCN中交叉引用您的问题(有一些答案):