这是我要实现的目标:

public class cls1{
  public cls1(){}                        //constructor for the sending class
  String name = "foo";                   //String I wish to access
  public String sentName(){              //Method to access the string outside
    return name;
  }
}

public class cls2{                       //Class where I wish to access the name
  public String gotName(Object obj){     //Method where I wish to call the cls1 instance
    String recvName;
    if(obj.getClass()==cls1.class){
      recvName = obj.sentName();         //THE PROBLEM
    }
    return recvName;
  }
}


我确实了解obj在运行时之前不会拥有cls1的方法和变量,因此无法编译该行。有没有办法做到这一点?

附言我还尝试在cls1中创建cls2的实例:

cls1 cls1Inst;
obj=cls1Inst;
cls1Inst.sentName();


但这给出了nullpointer异常,可能是因为我试图访问cls1的方法而没有实际创建它的实例(我对nullpointer不太清楚,对不起,我很笨拙)。

任何帮助,将不胜感激。

最佳答案

对象是每个对象的基类。首先,您必须在cls1中进行类型转换,然后可以使用cls1方法。

更改

recvName = obj.sentName();




recvName = ((cls1)obj).sentName();


在这段代码中

cls1 cls1Inst;  // here it is uninitilized (null)
obj=cls1Inst;    //<------ after this statement cls1Inst will be same and null
cls1Inst.sentName();// thats why it throws null pointer exception


该代码将起作用

cls1 cls1Inst;  // here it is uninitilized (null)
cls1Inst = (cls1)obj;    // if obj is not null then typecast it. Now it is assigned to cls1Inst
cls1Inst.sentName(); // it will work perfect file


更新

或者,您可以将功能参数类型从Object更改为cls1。这样可以避免额外的检查类类型的检查。参见下面的代码。

public String gotName(cls1 obj){
      return obj.sentName();// No need to check class type. just return name
  }

07-27 21:11