java - 将 Child 转换为 Parent 可以吗?

标签 java android casting parent-child instanceof

我的 Android 项目中有以下代码:

// The OnTouchListener is used so we are able to trigger the OnItemClickListener of the ListView,
// even though an EditText or AutoCompleteTextView is focused
private OnTouchListener itemOnTouchListener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(v instanceof EditText){
            EditText et = (EditText)v;
            et.setFocusable(true);
            et.setFocusableInTouchMode(true);
        }
        else{
            MyHolder h = (MyHolder) v.getTag();
            h.etAmount.setFocusable(false);
            h.etAmount.setFocusableInTouchMode(false);
            h.actvName.setFocusable(false);
            h.actvName.setFocusableInTouchMode(false);
        }
        return false;
    }
};

View 可以是:

  • 编辑文本
  • AutoCompleteTextView
  • 一些其他 View 元素

我已经调试了代码,从AutoCompleteTextView's parent开始是EditText,代码也放到这个if里面。

所以我的问题:在 AutoCompleteTextView 上使用 EditText et = (EditText)v; 来设置其 setFocusablesetFocusableInTouchMode 是否安全?或者我应该将其更改为以下内容?

// The OnTouchListener is used so we are able to trigger the OnItemClickListener of the ListView,
// even though an EditText or AutoCompleteTextView is focused
private OnTouchListener itemOnTouchListener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // WARNING: Leave this if above the if else for EditText,
        // since AutoCompleteTextView has EditText as parent
        if(v instanceof AutoCompleteTextView){
            AutoCompleteTextView actv = (AutoCompleteTextView)v;
            actv.setFocusable(true);
            actv.setFocusableInTouchMode(true);
        }
        else if(v instanceof EditText){
            EditText et = (EditText)v;
            et.setFocusable(true);
            et.setFocusableInTouchMode(true);
        }
        else{
            MyHolder h = (MyHolder) v.getTag();
            h.etAmount.setFocusable(false);
            h.etAmount.setFocusableInTouchMode(false);
            h.actvName.setFocusable(false);
            h.actvName.setFocusableInTouchMode(false);
        }
        return false;
    }
};

最佳答案

是的。您可以将子对象转换为父对象,因为每个子对象都是父对象。这就是 OOP 的美妙之处。

关于java - 将 Child 转换为 Parent 可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036021/

相关文章:

java - Java 程序将日期转换为序列号,就像在 Excel 中一样

java - Log4j2 的 RoutingAppender 的通配符模式

android - 如何将 Runnable 对象传递给处理程序?

将 char arr[64] 复制到 char arr[] 会导致段错误吗?

iphone - 快速枚举期间实际发生了什么?

从 int* 转换为 void*。做什么的?

java - web.xml 中的 auth-constraint 元素

java - org.hibernate.MappingException : entity class not found: dto. CityDTO

java - 不知何故,这个 if 语句不起作用?

java - 可以在android上使用jdbc驱动吗?