【问题标题】:Assigning variables in Java with parenthesis [closed]用括号在Java中分配变量[关闭]
【发布时间】:2014-01-09 10:38:21
【问题描述】:

在Java中,为什么有些语句赋值变量的值部分在括号中?我从来没有遇到过这种格式,也不知道为什么或何时使用它。以下是具有这种格式的一行代码示例:

JPanel mainPanel = (JPanel) this.getContentPane();

在值前面加上括号有什么作用?我唯一的猜测是它是某种类型的自动类型转换?请帮忙,因为我开始遇到很多这样的陈述。

【问题讨论】:

  • 这称为casting。谷歌一下。
  • 你真的欠自己一两个教程。
  • 不要小看第一次看到选角并想知道它是关于什么的人。我们都曾在某个时候去过那里。
  • @TimothyGroote Not 如果您阅读了基本教程。我们希望在发布问题之前进行最少的研究。此外,没有人看不起任何人,我们正在引导他走向正确的道路。
  • 同意,OP 本可以做更多的研究,但是对于第一次涉足 OOP 的人来说,这种事情可能看起来很陌生,并且对继承和强制转换的解释往往会很快变得复杂,尤其是在语言中像 Java 一样,继承会导致一些非常复杂的情况。

标签: java swing graphics syntax


【解决方案1】:

括号是强制转换。 在这种情况下,它会尝试将来自this.getConentPane() 的返回对象解释为JPanel

因为在 Swing 中,getContentPane() 方法可以返回从内容窗格的基类派生的任何对象,它总是将该对象作为该基类的实例返回。

为了将返回的对象寻址为JPanel,首先需要将其转换为JPanel

但是,只有当方法返回的对象派生自或是您将其强制转换为的类型的实例时,才能这样做。

尝试将对象转换为不是对象类型的类型,或者不是它继承自的类型,或者在接口未实现接口的情况下,将引发异常。

所以如果你要这样做:

//this cast is impossible, since the object returned by this.getContentPane()
//does not derive of the "float" class
float impossible = (float) this.getContentPane();

你会得到一个例外。

为了完全理解发生了什么,我建议研究类继承。

【讨论】:

  • 是的,在这种情况下,可以通过强制转换从 JFrame.getContentPane() 将 JPanel 作为派生返回,仅此而已
  • 我要补充一点,如果你错了,并且返回的对象不是 JPanel,那么会抛出异常
  • @RichardTingle 好主意。我加了。
【解决方案2】:

此括号用于将对象转换为所需的类。

当您有返回泛型类型的方法并且您需要具体类型时,这一点很重要。在这种情况下,getContentPane 返回 java.awt.Container,您需要将其分配给 JPanel。

您可以在http://www.javabeginner.com/learn-java/java-object-typecasting下找到更多详细信息

【讨论】:

    【解决方案3】:

    这称为类型转换。基本上它将一种对象引用转换为另一种。有两种类型转换:向上转换和向下转换。

    向上转型将子类转换为超类。 Upcasts 是隐式的,可以自动发生:

    Object obj = "hello world";
    

    String 是 Object 的子类,因此您始终可以将 String 分配给 Object 的引用。分配另一种方式称为向下转换:

    String str = (String)obj;
    

    您需要明确地向下转换,因为向下转换并不总是有效的:

    Object obj = new Integer(0);
    String str = (String)obj; // hello ClassCastException
    

    您展示的演员表是必要的,因为getContentPane 返回一个容器。请注意,将 Container 转换为 JPanel 有点“不安全”,因为内容窗格不必是 JPanel。通常是这样。

    【讨论】:

      【解决方案4】:

      这称为类型转换。在代码中:

      JPanel mainPanel = (JPanel) this.getContentPane();
      

      上面的语句转换了getContentPane()的结果; JPanel 类型的方法并将其存储到 JPanel 类型的 mainPanel 中。

      【讨论】:

      【解决方案5】:

      这称为强制转换或type conversion

      【讨论】:

      • 答案链接不是答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-07
      • 2014-02-21
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2016-09-23
      • 2012-08-12
      相关资源
      最近更新 更多