Java返回一个对象

3

我目前正在学习Java,但是我现在遇到了以下错误

Object label1 = addLabel("First number");

我的addLabel函数
public Object addLabel(String text)
{
     JLabel label = new JLabel(text);
     add(label);

     return label;
}

我想知道为什么我无法访问变量label1的任何标签方法,即使我将其作为对象返回?
例如:label1.setBounds(...);

1
因为类Object(你要返回的类型)没有这些方法。如果你想使用JLabel的方法,你需要将你的对象转换成JLabel。 - takendarkk
3个回答

6
您只能访问变量可用的方法,而Object没有这些方法。这就是为什么您不应该以这种方式使用Object的原因。是的,变量所持有的对象是JLabel,但编译器知道变量可以持有任何类型的对象,因此为了安全起见,仅允许调用Object方法。
可能的解决方案:
  • 您可以进行强制转换:((JLabel) label1).setText("Foo");
  • 或者更好地声明label1为JLabel变量,并声明addLabel返回一个JLabel。

4

因为您已经擦除了类型,所以您需要返回一个JLabel将其用作JLabel -

public JLabel addLabel(String text)
{
  JLabel label = new JLabel(text);
  add(label);

  return label;
}

然后

JLabel label1 = addLabel("First number");

0

内存中存在的对象类型和你对它的引用类型之间存在区别。

在这种情况下,内存中的对象是一个JLabel,但你的引用是一个Object - 因此使用这个引用的代码只能看到Object中可用的方法。

如果你选择将你的对象作为JLabel返回并将引用存储为JLabel,则随后的代码将可以访问JLabel中的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接