为什么需要为EditText.getText()创建一个对象?

时间:2019-05-14 14:20:22

标签: java android

我目前正在Android-Studio中使用Java。 我偶然发现了一个我不了解的现象。当我尝试调用EditText类的getText()时,首先需要创建EditText类的实例。有人可以解释为什么吗?

这有效:

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

这不是:

findViewById(R.id.editText).getText();

3 个答案:

答案 0 :(得分:3)

这是因为View#findViewById返回的对象的类型是通用的,如果给出了引用类型,通常将其自动转换为引用类型(在您的情况下为EditText)。

引用文档:

  

注意:在大多数情况下(取决于编译器的支持),结果视图将自动转换为目标类类型。如果目标类类型不受限制,则可能需要显式强制转换。

如果您的编译器不知道findViewById(R.id.editText)的类型为EditText,则它将不允许您调用getText(即android.view.View不具有{{ 1}}方法)。

答案 1 :(得分:2)

因为我们正在XML文件中编写EditText并在java类中进行了功能。 由于这个原因,这两个应该使用下面的id进行修饰

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

然后Java类知道存在一个具有特定ID的EditText。

如果您直接按以下方式使用

findViewById(R.id.editText).getText();

您将获得 NullPointer异常

并且还通过 getText()函数返回一个对象。 所以我们不能将其设置为字符串变量

答案 2 :(得分:1)

在继续@mena的回答时,请尝试投射它以编辑文本。会起作用

((EditText) findViewById(R.id.editText)).getText();