【问题标题】:Are Android type parameters also an objectsAndroid类型参数也是对象吗
【发布时间】:2012-09-25 09:16:56
【问题描述】:

怎么可能:

final Button okButton = (Button)findViewById(R.id.okButton);

这很清楚,是变量声明+赋值,绝对不是对象! 如果是这样,我该如何执行以下操作,并在其上实际操作方法?:

okButton.setOnClickListener(this);
okButton.setOnLongClickListener(this);

??

这让人困惑……

谢谢...

【问题讨论】:

  • 我的意思是一个变量...(固定)

标签: android object methods parameters


【解决方案1】:

与安卓无关。您似乎对 Java 语法感到困惑。 “final Button okButton”是“Button”类型的对象“okButton”的声明。对象引用已声明为“final”,因此无法再次分配。

【讨论】:

  • ...实际上只需要一些非常基本的反射代码即可。
  • 我知道,但是需要用关键字“new”声明一个新对象,否则它是一个变量,不是吗?如果不是,您如何区分它们(var vs obj)?
  • 所以okButton是Button类型的变量。因此,您可以在其上调用 Button 类的方法。这能回答你的问题吗?
  • 我还没有完全理解好,因为int也是一个int类型,但是我不能对它操作方法……那么这又是什么区别:Button okButton = new Button (); ??
  • 我可以试着解释一下。但是通过阅读 Java 书籍,您会受益更多。 (我不是想冒犯)
【解决方案2】:

A variable can be an Object

如果您查看documentation for findViewById,它接受一个int 类型的参数并返回一个视图。

您在findViewById 前加上(Button) 以告诉系统您期望将R.id.okButton 传递给findViewById 将返回一个实际上是Button (a sub-class of View) 实例的视图。

该指令(Button)casts 将由findViewById 返回给类型按钮的视图并将其分配给您的变量okButton

所以

  • R.id.okButton 是一个 int,作为参数传递给
  • findViewById 是一种方法(我猜可能是 Activity)
  • 返回一个可以转换为对象的 View 类型的对象
  • Button 类型,分配给您的 Button 变量

【讨论】:

  • 所以你说在Java中,参数实际上是一个具有一个属性的对象?对象和参数之间的区别在于属性的数量和对象的关键字'new'?
  • 没有。参数是传递给方法的一条信息。它可以是原始类型,例如 int 或 Object。 Object 和 parameter 的区别在于,一个是 Object,可以包含方法,另一个是参数(它们之间有很多区别)。你真的很想阅读基本的 Java 文档和一些基本的面向对象示例,以直接了解这些基本术语的含义
  • 我知道所有这些,但似乎有什么不同:private Button okButton=(Button)findViewById(R.id.okButton);为此: 按钮 okButton = new Button(); okButton=(Button)findViewById(R.id.okButton) ???谢谢
  • 在第一个示例中,您从 findViewById 获取一个视图并将其转换为按钮,在 okButton 变量中存储对它的引用。在第二个中,您创建一个新按钮并将对它的引用存储在 okButton 中,然后您从 findViewById 获取一个视图并将对它的引用存储在 okButton 变量中。第二个赋值替换了对第一个按钮的引用。
【解决方案3】:

Button okButton 表示您已经创建了一个 Button 对象名称 okButton 然后您通过您在 xml 中创建的按钮类型对象实例化它并提供了一个唯一的标识名称 okButton .

另一种方法是

Button okButton = new Button(this);

实际上它们之间没有区别,您可以动态创建它并且可以添加/删除它们而无需触摸 xml。

【讨论】:

  • 那么似乎有什么不同: Button okButton = new Button(); ??
  • 在您的评论中,您明确创建了一个 Button 并将其分配给一个变量。在 findViewById 的情况下,您向方法询问按钮。您不需要知道或关心它是创建一个新按钮还是引用一个已经存在的按钮。
猜你喜欢
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多