这是我要实现的目标:
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的方法和变量,因此无法编译该行。有没有办法做到这一点?
P.S。我还尝试在cls1
中创建cls2
的实例:
cls1 cls1Inst;
obj=cls1Inst;
cls1Inst.sentName();
但是这给出了一个nullpointer异常,可能是因为我试图访问cls1的方法而没有实际创建它的实例(我对nullpointer不太清楚,对不起,请原谅)。
任何帮助将不胜感激。
答案 0 :(得分:1)
您不能在对象类object上调用sendName()。您需要先将其转换为cls1类。
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){
cls1 cls1Obj = (cla1)obj;
recvName = cls1Obj.sentName(); //THE PROBLEM
}
return recvName;
}
}
答案 1 :(得分:0)
对象是每个对象的基类。首先,您必须使用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
}