我正在学习android开发,他们用这种语法给出了一个例子:
Button button = (Button) findViewById(R.id.button_id);
'Button'字告诉编译器从Button类创建一个对象。等号的严格的语法让我感到困惑。代码正在创建一个对象,但它的严格方面似乎并没有创建一个对象。
我搜索过并发现有一些方法可以创建一个对象:What are all the different ways to create an object in Java? 但是没有一个使用示例中的语法。
类似的是这一个:
MyObject object =(MyObject) 的Class.forName( “subin.rnd.MyObject”)的newInstance();
但它使用关键字“Class.forName”...
那么,有人可以向我解释代码的每个部分的含义吗? “findViewById”是java的一部分还是类似于编译器将按钮对象链接到屏幕的“宏”?
我对某些概念有点困惑。我想了解java代码和SDK代码之间的这种交互。
答案 0 :(得分:2)
这不会创建对象。
findViewById(R.id.button_id);
是一种非常正常的方法调用。它调用方法findViewById
,并将R.id.button_id
的值传递给它。 findViewById
返回对视图的引用(在本例中为按钮)。
(Button)
是演员。 (Button)something
执行以下操作:
something
不是对Button
对象的引用,则抛出ClassCastException
。Button
参考。
没有演员,这个:
Button b = findViewById(R.id.button_id);
无法编译,因为如果findViewById
实际上返回了对TextBox
的引用怎么办?
答案 1 :(得分:0)
等号的严格的语法让我感到困惑。代码正在创建一个对象,但它的严格方面似乎并没有创建一个对象。
右侧是方法named findViewById()
的调用。此方法在Java类named Activity
上实现,您的代码(可能)驻留在Activity
的子类中。 findViewById()
方法返回一个对象。 Java中的许多方法都返回了对象。
答案 2 :(得分:0)
findViewById用于获取布局膨胀后在视图xml中定义的按钮的引用,以便在运行时进行更改。此按钮将在xml中为res / layout / Activity.xml中的活动定义(其中Activity.xml是您正在加载的活动)
第二行代码实例化了一个类subin.rnd.MyObject的对象,然后将其强制转换为MyObject。
答案 3 :(得分:0)
所有小部件都是View
类的子类。基本上,您是根据XML中的标识符抓取元素并将其转换为Button。