android - java强制类型转换.

 666666顺2502878433 发布于 2022-10-31 10:53

android training中的bitmap讲解中有这么一段代码

static class AsyncDrawable extends BitmapDrawable {
    private final WeakReference bitmapWorkerTaskReference;

    public AsyncDrawable(Resources res, Bitmap bitmap,
            BitmapWorkerTask bitmapWorkerTask) {
        super(res, bitmap);
        bitmapWorkerTaskReference =
            new WeakReference(bitmapWorkerTask);
    }

    public BitmapWorkerTask getBitmapWorkerTask() {
        return bitmapWorkerTaskReference.get();
    }
}
----------------------
private static BitmapWorkerTask getBitmapWorkerTask(ImageView imageView) {
   if (imageView != null) {
       final Drawable drawable = imageView.getDrawable();
       if (drawable instanceof AsyncDrawable) {
           final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable;
           return asyncDrawable.getBitmapWorkerTask();
       }
    }
    return null;
}

这里的drawable强制转换为AsyncDrawable,为什么这里的父类转换为子类asyncDrawable.getBitmapWorkerTask()不是返回null

3 个回答
  • 代码里不是很清楚吗,返回的是:return asyncDrawable.getBitmapWorkerTask();

    2022-10-31 22:52 回答
  • 前面有判断 if (drawable instanceof AsyncDrawable)

    既然if为true,drawable 就肯定是 AsyncDrawable,而且强制类型转换失败会抛异常,也不可能返回NULL

    2022-10-31 22:52 回答
  • 子类中定义的方法,父类型的变量(还是叫父类引用顺口)是不能调用的,如果调用会引发编译错误。

    如果对象确实是子类对象(看 new 的是哪个),那可以将父类引用强制转换为子类引用,之后就可以调用子类方法了。

    但是这种转换是有风险的,除非你清楚的知道这个父类引用所引用的对象是子类对象,所以可以先用 instanceof 来判断。当然,如果你自己清楚,也可以不判断。

    如果不小心搞错了类似,会抛 java.lang.ClassCastException(运行时,非编译时)

    class A {
        public void Do1() {
            
        }
    }
    
    class B extends A {
        public void Do2() {
            
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            A a = new B();
            a.Do2();        // 错误: 找不到符号
            ((B) a).Do2();  // 成功
        }
    }
    
    2022-10-31 22:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有