Button buttonClick = (Button) findViewById(R.id.button)
应用Java语法,上面的语句表示方法返回的值 findViewById() 已更改到数据类型按钮,并存储在变量 buttonClick 中。
我研究过Java(显然还不够!),并且从未遇到类型转换用户定义的数据类型。 这是如何工作的?
答案 0 :(得分:1)
将@nikis响应放入代码中:
public class View extends Object {...}
public class Label extends View {...}
public class Button extends View {...}
public View findViewById(String id) {...}
//normal assignment
View v = findViewById(viewID);
//implicit casting to base class
Object o = findViewById(objectID);
//compile time error because the return might not be a Button
Button b = findViewById(buttonID);
//explicit cast forces compiler to treat the return as a Button
//if the return is not a Button, then ClassCastException is trown at runtime
Button bb = (Button)findViewById(buttonID);
答案 1 :(得分:0)
这是显式转换,它起作用,因为Button
类扩展了View
类,它是findViewById
方法的返回类型。您应该使用显式转换进行下游转换,因为它不安全。您可以在Java中的任何对象之间使用显式强制转换,但如果实际上不可能进行强制转换,则您将在运行时获得ClassCastException
。另一方面,存在隐式转换,它总是安全的,因此不需要声明它。隐式投射是上游投射,例如从View
到Object
。