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'作为参数.通过删除此方法调用一切正常.为什么会这样?还有其他人经历过这个吗?
您可以将此传递给方法,但setTopWorldAgent()不能是抽象的.您无法在构造函数中进行虚拟调用.
在对象的构造函数中,您可以调用在该对象或基类中定义的方法,但是您不能期望调用将由派生类提供的内容,因为派生类的某些部分尚未构造.如果setTopWorldAgent()是抽象的,我会期望某种编译器错误.
在Java中,您可以使用构造函数和派生类获得令人惊讶的行为 - 这是一个示例
http://en.wikipedia.org/wiki/Virtual_functions#Java_3
如果您习惯使用C#或C++,您可能认为调用虚函数是安全的,而不是调用被覆盖的函数.在Java中,即使派生类未完全构造,也会进行虚拟调用.
如果这不是正在发生的事情,那么可能是setTopWorldAgent()需要的所有部分都被初始化 - 如果不是,它可能是需要初始化的成员之一.
编辑:以为这是C#
出于好奇,你为什么要把'this'传递给同一个班级的成员函数?setTopWorldAgent()可以直接使用'this'.它看起来不像你的构造函数或setTopWorldAgent()是静态的,所以我不确定你为什么要传递一个它已经有权访问的成员函数.
除非我遗漏了什么......
归档时间: |
|
查看次数: |
9278 次 |
最近记录: |