我正在学习Java,我现在面临以下错误
Object label1 = addLabel("First number");
我的addLabel函数
public Object addLabel(String text)
{
JLabel label = new JLabel(text);
add(label);
return label;
}
我想知道为什么我不能在我的变量label1上访问任何标签方法,如果我将它作为对象返回?
例如:label1.setBounds(...);
答案 0 :(得分:6)
您只能访问变量可用的方法,而Object没有这些方法。这就是为什么你不应该以这种方式使用Object。是的,变量保存的对象是JLabel,但编译器知道变量可以包含任何类型的对象,因此为了安全起见,只允许对象方法调用。
可能的解决方案:
((JLabel) label1).setText("Foo");
label1
声明为JLabel变量并声明addLabel
以返回JLabel。答案 1 :(得分:4)
由于您已删除了该类型,因此需要返回JLabel
才能将其用作JLabel
-
public JLabel addLabel(String text)
{
JLabel label = new JLabel(text);
add(label);
return label;
}
然后
JLabel label1 = addLabel("First number");
答案 2 :(得分:0)
内存中存在的对象类型与您拥有的引用类型之间存在差异。
在这种情况下,你的内存中的对象是一个JLabel,但是你的引用是一个Object - 所以使用这个引用的代码只能看到Object中可用的方法。
如果您选择将对象作为JLabel返回并将引用存储为JLabel,则后续代码可以访问JLabel中的方法。