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)"使用? 缩短了吗?如何解构呢? 除了这个之外,还有一些有用的缩短吗?
答案 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)"使用?
这称为对象类型转换