我目前正在Android-Studio中使用Java。 我偶然发现了一个我不了解的现象。当我尝试调用EditText类的getText()时,首先需要创建EditText类的实例。有人可以解释为什么吗?
这有效:
EditText editText = findViewById(R.id.editText);
editText.getText();
这不是:
findViewById(R.id.editText).getText();
答案 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();