Java - 变量声明中的重复

时间:2014-05-26 17:15:57

标签: java android

我不确定这甚至叫什么,所以很难找到答案。

我目前正在学习Java和Android开发,并注意到一种模式,其中声明的对象或变量的类型重复多次,我不明白为什么。

例如:

    EditText editText = (EditText) findViewById(R.id.edit_message);

为什么必须在赋值运算符'='之前和之后声明它是一种EditText?为什么不够一次?为什么这有必要?

我来自红宝石背景,我很难绕过它。

3 个答案:

答案 0 :(得分:3)

这是名为Type Casting

的结果

EditText继承自View类型。

由于您需要EditText类型的变量,但findViewById会返回View类型的对象, 您必须将findViewById的结果转换为EditText

举例说明:

View uncasted = findViewById(R.id.edit_message);
EditText casted = (EditText)uncasted;
                  //casting happening on right side above

答案 1 :(得分:1)

如果你看一下源代码。

1883    public View findViewById(int id) {
1884        return getWindow().findViewById(id);
1885    }
1886

返回类型为View。由于它是EditText对象,因此您将其转换为EditText

 EditText editText = (EditText) findViewById(R.id.edit_message);
 // this (EditText) is explicit casting

答案 2 :(得分:1)

findViewById(...)是一个返回View对象的方法(在您的情况下是一个名为edit_message的视图)。但是,Java会发现您需要一侧有EditText个对象

 EditText editText = ...

并在另一方返回View

... = findViewById(R.id.edit_message);

Java无法确定EditText是否与View兼容(但您知道EditText与View兼容,因为EditText是类View的子级)。

因此,为了说服Java“edit_message”实际上是EditText对象,您必须在返回方法{{1}之前添加(EditText) 明确地强制转换 }

之后,变量findViewById(R.id.edit_message);即使是来自editText的{​​{1}}对象,也是一个完整的EditText对象。