Java 为什么需要为EditText.getText()创建对象?
我目前正在Android Studio中玩Java。 我偶然发现了一个我不理解的现象。当我尝试调用EditText类的getText()时,首先需要创建EditText类的实例。有人能解释一下为什么会这样吗 这项工作: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(); 这是因为返回的对象的类型是泛型的,如果给定了引用
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收到了。谢谢。”。