使用'this'作为构造函数中方法调用的参数

6 java methods constructor this call

我有一个如下构造函数:

public Agent(){

    this.name = "John";
    this.id = 9;
    this.setTopWorldAgent(this, "Top_World_Agent", true);

}
Run Code Online (Sandbox Code Playgroud)

我在方法调用中得到一个空指针异常.这似乎是因为我在setTopWorldAgent方法中使用'this'作为参数.通过删除此方法调用一切正常.为什么会这样?还有其他人经历过这个吗?

Lou*_*nco 8

您可以将此传递给方法,但setTopWorldAgent()不能是抽象的.您无法在构造函数中进行虚拟调用.

在对象的构造函数中,您可以调用在该对象或基类中定义的方法,但是您不能期望调用将由派生类提供的内容,因为派生类的某些部分尚未构造.如果setTopWorldAgent()是抽象的,我会期望某种编译器错误.

在Java中,您可以使用构造函数和派生类获得令人惊讶的行为 - 这是一个示例

http://en.wikipedia.org/wiki/Virtual_functions#Java_3

如果您习惯使用C#或C++,您可能认为调用虚函数是安全的,而不是调用被覆盖的函数.在Java中,即使派生类未完全构造,也会进行虚拟调用.

如果这不是正在发生的事情,那么可能是setTopWorldAgent()需要的所有部分都被初始化 - 如果不是,它可能是需要初始化的成员之一.

编辑:以为这是C#


Rob*_*Rob 5

出于好奇,你为什么要把'this'传递给同一个班级的成员函数?setTopWorldAgent()可以直接使用'this'.它看起来不像你的构造函数或setTopWorldAgent()是静态的,所以我不确定你为什么要传递一个它已经有权访问的成员函数.

除非我遗漏了什么......