什么java规则"((CheckBox)v).isChecked())"使用?

时间:2014-05-19 14:42:33

标签: java android

CheckBox checkBox = (CheckBox) findViewById(R.id.chkAutosave); checkBox.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (((CheckBox) v).isChecked()) DisplayToast("CheckBox is checked"); else DisplayToast("CheckBox is unchecked"); } });

java规则做什么"((CheckBox)v)"使用? 缩短了吗?如何解构呢? 除了这个之外,还有一些有用的缩短吗?

2 个答案:

答案 0 :(得分:3)

我在这里猜测上下文 - 类似于:

public void checkIt(Object v) {
  if ((CheckBox) v).isChecked() {
     System.out.println("checked!");
  }
}

(CheckBox)投射对象v

换句话说,它向编译器断言v具有类型CheckBox,因此可以在CheckBox上调用v的方法。

我们必须“知道”v实际上是CheckBox类型,而不仅仅是方法声明中声明的Object

通常,应尽可能避免使用这样的强制转换,因为我们失去了编译时类型的安全性。如果v实际上不是Checkbox,我们将获得运行时异常(ClassCastException

附加括号表示我们可以直接调用该方法。而不是

CheckBox cb = (CheckBox) v;
cb.isChecked()

我们可以做到:

((CheckBox) v).isChecked();

所以从这个意义上来说,如果那就是你的意思,那就是'缩短'。

答案 1 :(得分:1)

  

除了这个之外,是否有一些有用的缩短?

如果我理解你的问题,你要求缩短你的代码:

boolean isToastDisplayed = ((CheckBox) v).isChecked() ? DisplayToast("CheckBox is checked"); : DisplayToast("CheckBox is unchecked");

这是通过使用条件运算符? :

  

java规则做什么"((CheckBox)v)"使用?

这称为对象类型转换