2 回答
TA贡献1833条经验 获得超4个赞
如果你有一个 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 中创建类的教程。
TA贡献1824条经验 获得超5个赞
凯文解释了这个问题。但是,您可以使用泛型告诉编译器您要输入什么类型,而不必限制类型或进行危险的强制转换,因为保证对象的类型并不总是那么容易。
class Test<T> {
int num;
public T obj;
public Test(int num, T 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<Bird> x = new Test<>(4, y);
}
添加回答
举报