java - 如何使用作为另一个类函数的参数访问的对象的函数?
问题描述
这就是我想要实现的目标:
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 的方法和变量,因此不允许该行编译。有没有办法做到这一点?
PS我还尝试创建cls1
in的实例cls2
:
cls1 cls1Inst;
obj=cls1Inst;
cls1Inst.sentName();
但这给出了一个空指针异常,可能是因为我试图访问 cls1 的方法而不实际创建它的实例(我对空指针不是很清楚,请原谅我的愚蠢)。
任何帮助,将不胜感激。
解决方案
您不能在对象类对象上调用 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;
}
}
推荐阅读
- jquery - 幻灯片更改运行打字机功能后的光滑轮播
- python-3.x - AppEngine 应用程序查询 BigQuery :: [错误] 上游过早关闭连接,同时读取响应标头
- javascript - Splash 不呈现 java 脚本
- ios - 当我返回菜单时,应用程序崩溃(线程 1:信号 SIGABRT)
- spring - Spring boot 客户端注册 Spring boot admin 失败(2.x 版本)
- entity-framework - EF Core 多次跟踪具有相同 ID 的实体
- sql-server - 在 SQL Server 2012 中选择查询后运行更新或插入查询
- typescript - vue-test-utils error TypeError: Class extends value undefined is not a constructor or null, 当我运行测试时
- mysql - 用二元运算符 mysql 查询更新列的 JPQL jpa (@Query) 是什么?
- apache-kafka - Kafka-Manager Web UI 未加载