【问题标题】:Java returning an ObjectJava 返回一个对象
【发布时间】:2014-05-27 20:47:00
【问题描述】:

我目前正在学习 Java,我现在面临以下错误

Object label1 = addLabel("First number");

还有我的 addLabel 函数

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

     return label;
}

我想知道如果我将变量 label1 作为对象返回,为什么我无法访问变量 label1 上的任何 label 方法?

例如:label1.setBounds(...);

【问题讨论】:

  • 因为类Object(这是您要返回的类型)没有任何这些方法。如果你想要 JLabel 方法,你需要让你的对象成为一个 JLabel。

标签: java object return


【解决方案1】:

内存中存在的对象类型和你对它的引用类型是不同的。

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

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

【讨论】:

    【解决方案2】:

    您只能访问变量可用的方法,而 Object 没有这些方法。这就是为什么您不应该以这种方式使用 Object 的原因。是的,变量持有的对象是 JLabel,但是编译器知道变量可以持有 any 类型的对象,因此为了安全起见,只允许 Object 方法调用。

    可能的解决方案:

    • 你可以投:((JLabel) label1).setText("Foo");
    • 或者最好将 label1 声明为 JLabel 变量并声明 addLabel 以返回 JLabel。

    【讨论】:

      【解决方案3】:

      因为你已经擦除了类型,所以你需要返回一个JLabel来使用它作为JLabel -

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

      然后

      JLabel label1 = addLabel("First number");
      

      【讨论】:

        猜你喜欢
        • 2012-04-23
        • 2023-03-19
        • 1970-01-01
        • 2013-03-18
        • 1970-01-01
        • 2017-07-31
        • 2015-06-06
        • 2015-06-03
        • 2014-05-22
        相关资源
        最近更新 更多