(button) 是什么意思?

3

我是Java的初学者,遇到了这行代码:

Button orderButton = (Button)findViewById(R.id.order);

(Button)出现在括号中时,它代表什么意思?

把它放在括号里面的术语是什么?

4个回答

6

这是一种类型转换。你将结果转换成了Button类型。


类型转换何时必要?如果这行代码没有使用它会发生什么? - user1389811
1
@user1389811:这个最好用一个例子来说明:如果你有一个Animal和一个派生类型的Dog,并且你有一个返回类型为Animal的函数,但是你知道(出于某种原因)它返回给你的值实际上是Dog的一个实例,并且你想要将结果存储在类型为Dog的变量中,你需要进行类型转换:Dog d = (Dog)getTheAnimal();相反的情况不成立:Animal a = getADog();因为你可以将后代类型(Dog)分配给祖先类型(Animal)的变量而不需要进行转换。 - T.J. Crowder
1
@user1389811,你应该尝试在代码中去掉类型转换。我猜你的代码会报错,提示类似于“类型错误:无法将类型(View Object)转换为类型(Button)”...强制转换会让编译器把一个对象看作不同的对象。 - corn3lius
@user1389811:继续我上面的评论:进行强制类型转换还有其他与原始类型相关的原因:例如,当您拥有一个在int中的值,您知道它足够小以适合于byte,并且由于某种原因您想要这样做:byte b = (byte)i; - T.J. Crowder

3
铸造的目的是让执行环境和IDE知道findViewById(R.id.order)返回的对象类型。findViewById(R.id.order)并不返回一个特定的类型,而是一个通用对象。由于Button包含与被对象引用的项相关的方法,因此需要告诉它它的类型,以便新变量orderButton将有权访问正确的方法。这是一个简单的示例。 http://www.java-samples.com/showtutorial.php?tutorialid=1170

1

这是一个typecastfindViewById 返回一个View对象,但你需要一个Button对象。 (Button)将View强制转换为Button。


1
这被称为类型转换。由findViewById(R.id.order);返回的对象很可能是Button扩展的某些内容。编写代码的人认为该函数调用返回的对象实际上是Button的一个实例,因此他将函数的返回值强制转换为Button的一个实例。

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