【问题标题】:What does this java code do?这个java代码是做什么的?
【发布时间】:2013-10-12 10:32:19
【问题描述】:

我刚刚遇到了一些我以前从未见过的语法,并且因为在 Google 上很难找到答案,所以我决定提出一个问题。 有问题的陈述是:

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

我知道代码正在创建 EditText 类的对象“editText”,但我之前从未见过等号之后的代码。 我最好的猜测是它正在运行 findViewById() 方法,并且这条消息存在于 EditText 类中,这就是为什么括号中的 EditText 是必要的?

我知道我现在可能应该知道这种语法,因为我刚刚在 CS 大学完成了我的第一门 Java 课程,但不幸的是,我们从来没有被介绍过这样的东西。

非常感谢。

【问题讨论】:

  • developer.android.com/reference/android/app/Activity.htmlfindViewById的第一个答案,如果你想进入android开发,值得一读。
  • 这是一种用于查找已在 xml 文件中声明的元素的 android 语法。我建议你通过 developer.android.com 来学习 android 编程,至少这样你会熟悉这个语法。
  • 我认为 EditText 是一个类,findViewbyId 必须返回一些需要转换为 EditText 类的东西。

标签: java android class object


【解决方案1】:

这是一个类型转换,强制编译器假设函数findViewById返回的结果是一个EditText对象。

如果是其他类型,则会出现运行时错误。

Here's the offical docs on the subject.

【讨论】:

  • 非常感谢您的解释和文档链接:)
  • 我要补充一点,这只有在 EditText 是 View 的子类时才有效,这是 findViewById 返回的类型;否则编译器会抛出错误,因为它知道方法返回的类型。另一种说法是“强制编译器假设”是“告诉编译器处理”
【解决方案2】:

findViewById 返回一个View,所以

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

将抛出一个编译异常,告诉您不能将 View 分配给 EditText 变量。

(EditText)View 类型转换为EditText,换句话说,您告诉编译器将findViewById 的结果分配给EditText 是安全的,正如您所期望的edit_message 视图实际上是一个EditText 对象。

最后,如果你对编译器“撒谎”并且edit_message 不是EditText,你将能够编译和运行,但你会得到一个ClassCastException

【讨论】:

    【解决方案3】:

    它用于创建文本框,您可以在其中键入查询,在此代码中 findviewbyid 是一个返回对象的方法,而 (EditText) 用于强制转换,因为这里返回的对象是 edittext 类型,这就是我们的原因保存在 EDITTEXT 类型的变量 edittext 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多