2013-03-05 94 views
-1

我首先知道这一定很简单,我一直试图在这里阅读类似的问题,在Stackoverflow.com和谷歌上,但我仍然无法让我的程序工作。如何使用'this'作为另一个对象的参数?

我赶紧写了什么我的程序试图做一个摘要:

public class One{ 

    public One(){ 
     Two t = new Two(this); 
    } 

    public void doSomething(){ 
     sout("HERE"); 
    } 

    public static void main(String[] args){ 
     One o = new One() 
     Two t = new Two(o); 
    } 

} 

    public class Two{ 

     public Two(One o){ 
      One o = o; 
      o.doSomething(); 
     } 
    } 

当我运行程序时,我得到一个NullPointerException异常,从方法调用o.doSomething()。我一直试图解决它,但我很难过。如果有人能够迅速告诉我修复它将不胜感激。

+3

“doSomething”中的NPE的实际行是什么? – 2013-03-05 20:17:39

+0

'sout'是什么? – 2013-03-05 20:18:22

+0

@BrendanLong一个IntelliJ快捷键:p – LuckyLuke 2013-03-05 20:18:51

回答

0

方法sout("HERE")不存在。如果您尝试打印某些内容以进行控制台操作,则应使用System.out.println("HERE")

+0

作为评论指出,这可能是特定IDE的捷径。 – arshajii 2013-03-05 20:20:23

5
One o = o; 

我不知道这意味着什么,但它不会工作。这应该是一个成员变量(this.o)?要做到这一点,把它的类,而不是功能:

public class Two{ 
    private One o; 

    public Two(One o){ 
     this.o = o; 
     o.doSomething(); 
    } 
} 

,或者完全删除它,如果你不需要它:

public class Two{ 
    public Two(One o){ 
     o.doSomething(); 
    } 
} 
0

我已经修改了你的类请我认为这应该工作

公共类一{

public One(){ 
    Two t = new Two(this); 
} 

public void doSomething(){ 
    System.out.println("HERE"); 
} 

public static void main(String[] args){ 
    One o = new One(); 
    Two t = new Two(o); 
} 

}

public class Two{ 

    public Two(One one){ 
     One o = one; //just changed the parameter name to one 
     o.doSomething(); 
    } 
} 
0

“this”字用于引用当前对象;另外当你想访问当前对象的变量“something”时,你可以使用“this.something”。

import java.io.*; 


public class One{ 
    public One(){ 
     Two t = new Two(this); 
    } 

    public void doSomething(){ 
     System.out.println("HERE"); 
    } 

    public static void main(String[] args){ 
     One o = new One(); 
     Two t = new Two(o); 
    } 
} 


public class Two{ 
    One o; 

    public Two(One o){ 
     this.o = o; 
     this.o.doSomething(); 
    } 
} 

这将编译生成:

例如,你可以在你的代码从“O”(输入参数)区分“this.o”(对象的属性)插入输出:

这里
这里

这是你想要的吗?

+0

我在5分钟前完成了这个程序,这正是我得到的。在我的实际程序中,我将它传递给了一个线程。我现在要调试它,在我想要发送的对象中添加toString方法,并在该线程中添加System.Out对象。 – 2013-03-05 20:46:15

相关问题