java - 将对象传递给类时,如何访问它的变量/函数?
问题描述
我希望这听起来不会太愚蠢并且有意义。
class Test {
int num;
public Object obj;
public Test(int num, Object obj){
this.num = num;
this.obj = obj;
}
int getNum(){
return num;
}
}
class Bird {
public int size;
public Bird(int size){
this.size = size;
}
public void setSize(int size){
this.size = size;
}
public int getSize(){
return size;
}
}
void setup(){
size(100, 100);
Bird y = new Bird(7);
Test x = new Test(4, y);
//x.obj.size does not work
//x.obj.getSize() does not work
}
所以我有这两个文件。第一个有类,第二个实际运行它。传入对象后,尝试访问该类的变量或函数不起作用。有没有办法使这项工作?
我最初试图找到一种方法来制作函数的 ArrayList(没有 Lambda),因为这变得徒劳无功,我考虑过改变我的方式。
我也尝试过制作public Object obj;
,public Bird obj;
但这并没有改变任何东西。
我在正确的轨道上吗?有没有一个好方法来做这样的事情?
我还要注意,这是在处理 3.5 中编写的。它就像 Java 的语法变化很小,所以这就是为什么有些东西看起来不正确的原因。这也是 Lambda 不起作用的原因。
提前致谢!
解决方案
如果你有一个 type 的变量Object
,那么编译器只“知道”类中的函数Object
。
如果要使用更特定类型的函数,则必须强制转换变量,如下所示:
Bird z = (Bird) x.obj;
println(z.size);
请注意,这实际上并没有改变对象的类型,它只是告诉编译器期望什么类型。如果变量实际上不是 a Bird
,那么这将失败。
或者您可以将obj
变量更改为更具体的类型:
class Test {
int num;
public Bird obj;
public Test(int num, Bird obj){
this.num = num;
this.obj = obj;
}
// ...
现在您可以从Bird
类中访问函数:
println(x.obj.size);
无耻的自我推销:这里有一个关于在 Processing 中创建类的教程。
推荐阅读
- reactjs - React Context 是如何实现的?
- javascript - QZ托盘将数据保存为pdf而不是打印
- react-native - 将参数传递给嵌套导航器
- c++ - C++如何调用D'tor?
- flutter - Flutter android 模块化依赖问题
- css - 是否有 (CSS) 过滤器可以在另一张图片上剪掉一张图片的轮廓?
- node.js - 如何在执行 findOneAndDelete 之前获取 _id
- python - 在 Django 中过滤多个模型
- xquery - 无法使用 XQuery 和 eXist-db 将文本显示到段落中
- javascript - 对象构造函数