Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建新活动时,为什么需要将EditText对象强制转换为EditText对象?_Java_Android_Xml - Fatal编程技术网

Java 创建新活动时,为什么需要将EditText对象强制转换为EditText对象?

Java 创建新活动时,为什么需要将EditText对象强制转换为EditText对象?,java,android,xml,Java,Android,Xml,这是Android Studio培训的一部分 EditText editText = (EditText) findViewById(R.id.edit_message); 完整的方法是: public void sendMessage(View view) { Intent intent = new Intent(this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById(R.id.

这是Android Studio培训的一部分

EditText editText = (EditText) findViewById(R.id.edit_message);
完整的方法是:

public void sendMessage(View view) {
  Intent intent = new Intent(this, DisplayMessageActivity.class);
  EditText editText = (EditText) findViewById(R.id.edit_message);
  String message = editText.getText().toString();
  intent.putExtra(EXTRA_MESSAGE, message);
}
有关此培训项目的更多信息,请访问:
findViewById()
默认情况下返回一个
视图
,该视图不包括像
getText()
这样的方法

EditText
View
的一个子类,这就是此强制转换工作的原因

java.lang.Object
   ↳    android.view.View
       ↳    android.widget.TextView
           ↳    android.widget.EditText
findViewById()
默认情况下返回一个
视图
,该视图不包括像
getText()
这样的方法

EditText
View
的一个子类,这就是此强制转换工作的原因

java.lang.Object
   ↳    android.view.View
       ↳    android.widget.TextView
           ↳    android.widget.EditText

方法
findViewById
返回一个
视图
,它是Android中任何视图的通用类。这意味着
ListView
TextView
TabHost
等都是
View
s

您必须强制转换它,以便您正在使用的对象能够访问该视图的特定方法。例如,
ListView
EditText
没有的方法


您可以无需担心地投射它,因为您知道您正在使用的对象确实是一个
EditText
。您知道这一点,因为您在编写布局时明确定义了一个
EditText
,并为这个
视图分配了一个ID,稍后您将使用它来标识这个完全相同的视图。

方法
findViewById
返回一个
视图
,这是Android中任何视图的通用类。这意味着
ListView
TextView
TabHost
等都是
View
s

您必须强制转换它,以便您正在使用的对象能够访问该视图的特定方法。例如,
ListView
EditText
没有的方法


您可以无需担心地投射它,因为您知道您正在使用的对象确实是一个
EditText
。您知道这一点,因为您在编写布局时明确定义了一个
EditText
,并为此
视图指定了一个ID,稍后将使用该ID来标识这个完全相同的视图。

您如何知道它是一个
EditText
?安卓是怎么知道的

事实上,除非你告诉它,否则Android不会知道,因为
findViewById()
的返回类型是
View
。虽然
EditText
是一种
视图
,但也有其他视图,可以定义自定义视图。演员阵容告诉Android,您承诺返回的
视图将是
编辑文本
,因此它可以将其视为一个。它要求您明确地强制转换部分是为了保护自己——这样您就知道您正在将自己的知识/假设注入到程序中


如果你的承诺被发现有错误,那么Android会抛出一个
ClassCastException
来惩罚你。

你怎么知道这是一个
编辑文本?安卓是怎么知道的

事实上,除非你告诉它,否则Android不会知道,因为
findViewById()
的返回类型是
View
。虽然
EditText
是一种
视图
,但也有其他视图,可以定义自定义视图。演员阵容告诉Android,您承诺返回的
视图将是
编辑文本
,因此它可以将其视为一个。它要求您明确地强制转换部分是为了保护自己——这样您就知道您正在将自己的知识/假设注入到程序中


如果你的承诺被发现有错误,那么Android会抛出一个
ClassCastException
来惩罚你。

此外,我不知道问题所有者对OOP和Java了解多少。因此,通过强制转换,所有特定于EditText的方法,如.setTextSize()、.getText()等都将可用。已经有好几年了,所以我试图在复习的同时潜入安卓系统。谢谢大家的解释。另外,我不知道问题所有者对OOP和Java了解多少。因此,通过强制转换,所有特定于EditText的方法,如.setTextSize()、.getText()等都将可用。已经有好几年了,所以我试图在复习的同时潜入安卓系统。谢谢大家的解释。