使用括号在Java中分配变量

时间:2014-01-09 10:38:22

标签: java swing graphics syntax

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

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

在值之前将括号放在括号中的功能是什么?我唯一的猜测是它是某种类型的自动类型转换?请帮忙,因为我开始遇到很多这样的陈述。

5 个答案:

答案 0 :(得分:3)

括号是演员表。 在这种情况下,它会尝试将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();

你会得到一个例外。

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

答案 1 :(得分:2)

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

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

您可以在http://www.javabeginner.com/learn-java/java-object-typecasting

下找到更多详情

答案 2 :(得分:0)

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

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

以上语句强制转换getContentPane(); JPanel类型的方法,并将其存储到JPPanel类型的mainPanel中。

答案 3 :(得分:0)

它被称为类型转换。基本上它将一种对象引用转换为另一种。有两种类型的演员:上流和下流。

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 :(得分:-1)

它叫做cast或type conversion