Java 如何使用作为另一类函数的参数访问的对象的函数?
这就是我努力实现的目标:Java 如何使用作为另一类函数的参数访问的对象的函数?,java,object,methods,Java,Object,Methods,这就是我努力实现的目标: 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 out
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的方法和变量,因此不允许编译该行。有没有办法做到这一点
另外,我还尝试在cls2
中创建cls1
的实例:
cls1 cls1Inst;
obj=cls1Inst;
cls1Inst.sentName();
但这会产生一个nullpointer异常,可能是因为我试图访问cls1的方法,而没有实际创建它的实例(我不太清楚nullpointer,请原谅我的愚蠢)
任何帮助都将不胜感激。对象是每个对象的基类。首先,您必须键入
cls1
,然后将提供cls1
方法
改变
recvName = 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
已更新
或者,您可以将函数参数类型从Object
更改为cls1
。这可以避免检查类类型的额外检查。请参阅下面的代码
public String gotName(cls1 obj){
return obj.sentName();// No need to check class type. just return name
}
不能对对象类对象调用sentName()。您需要先将其键入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;
}
}
这很有效,非常感谢。如果可以的话,你如何使用第二种方法或完全偏离轨道的方法获得相同的响应?@ElysianStorm你所说的第二种方法是什么意思?bdw见更新答案。如果你有任何困惑,那么问我。你的更新就是我所说的,谢谢伙计!实际上,在接收方法中使用正确的类型会更好!如果这是不可能的,你最好检查的类型,因为它在其他答案做@是的,那将是一个很好的方法。请参阅更新的答案:)谢谢您在哪里调用
cls2.gotname(obj)
?我需要这个方法,我没有在这里调用它是为了问题的简单性。在这种情况下,instanceof也可以工作,并且可能比直接比较类提供更好的结果。@jokster,同意您的看法。
public String gotName(cls1 obj){
return obj.sentName();// No need to check class type. just 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){
cls1 cls1Obj = (cla1)obj;
recvName = cls1Obj.sentName(); //THE PROBLEM
}
return recvName;
}
}