这是我要实现的目标:
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
}