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

Java 为什么需要为EditText.getText()创建对象?,java,android,Java,Android,我目前正在Android Studio中玩Java。 我偶然发现了一个我不理解的现象。当我尝试调用EditText类的getText()时,首先需要创建EditText类的实例。有人能解释一下为什么会这样吗 这项工作: EditText editText = findViewById(R.id.editText); editText.getText(); 这并不是: findViewById(R.id.editText).getText(); 这是因为返回的对象的类型是泛型的,如果给定了引用

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

这项工作:

EditText editText = findViewById(R.id.editText);
editText.getText();
这并不是:

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

这是因为返回的对象的类型是泛型的,如果给定了引用类型,通常会自动转换为引用类型(在您的示例中为,
EditText

引用文件:

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


如果编译器不知道
findViewById(R.id.editText)
属于
editText
类型,它将不允许调用
getText
(即
android.view.view
没有
getText
方法)

继续@mena的答案,尝试将其转换为编辑文本。它会起作用的

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

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

EditText editText = findViewById(R.id.editText);
然后java类知道有一个具有特定id的EditText

如果您直接使用,如下所示

findViewById(R.id.editText).getText();
您将获得空指针异常

还可以从getText()函数返回一个对象。
因此,我们不能将其设置为字符串变量

,如果
findViewById
创建了一个对象,那么它在两个示例中都创建了一个对象。第一个示例中唯一的区别是首先将实例存储在变量中。这两个例子应该是等效的。你得到的错误信息是什么?如果你不喜欢,试着熟悉数据绑定…@Babyburger我也是这么想的。“我得到的错误是无法解析方法'getText()。@acarlstein谢谢!强制转换确实有效。建议这样做吗?我喜欢将所有内容都排成一行,因为我不会对editText对象执行任何其他操作。@acarlstein收到了。谢谢。”。