在Java中,为什么一些赋值变量的语句部分在括号中有值?我从来没有碰到这种类型的格式,也不知道为什么或何时使用它。以下是使用此格式的一行代码示例:
JPanel mainPanel = (JPanel) this.getContentPane();
在值之前将括号放在括号中的功能是什么?我唯一的猜测是它是某种类型的自动类型转换?请帮忙,因为我开始遇到很多这样的陈述。
答案 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。