跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 为什么安卓源码经常用反射不用 new?
未分類
15 10 月 2020

为什么安卓源码经常用反射不用 new?

为什么安卓源码经常用反射不用 new?

資深大佬 : kerb15 3

比如 Instrument.java 类中的 Application app = (Application)clazz.newInstance();

为什么不直接写成 Application app = new Application();

最近阅读安卓源码发现有很多类似的写法,基本上能不 new 就不 new,这是出于什么考量呢?

网上有人说反射是为了降低耦合,但是单纯看这个场景这行代码的话,没有看出降低耦合的地方,还是说这是反射思想用多了的一种写法习惯呢?

大佬有話說 (10)

  • 資深大佬 : codehz

    因为 clazz 是运行期传入的。。。

  • 資深大佬 : TJT

    因为不能…

  • 資深大佬 : billlee

    Application 是个接口或抽象类吧

  • 資深大佬 : maninfog

    试想在我们继承 Application 的情况?这样系统只能从 manifest 中拿到我们继承的类名,然后构建 Class 对象,再去实例化

  • 資深大佬 : zpxshl

    只能反射,理由如 4 。
    activity 的创建过程也是同理

  • 資深大佬 : lijialong1313

    这其实就是 app 运行时候才知道这个是啥东西,相当于父类要先知道子信息了才能生成父类,明显只能用反射。

  • 資深大佬 : fangcan

    编码阶段无法确定的,在运行期才能确定的,只能用反射的方式实现

  • 資深大佬 : hoyixi

    Java 日常,有配置文件的地方就有反射,因为按照配置约束,你知道用户配了个“寂寞”,但是你不知道用户写的具体是“单身狗剧荒”, 还是“单身狗 X 饥渴”

  • 主 資深大佬 : kerb15

    “`
    static public Application newApplication(Class<?> clazz, Context context)
    throws InstantiationException, IllegalAccessException,
    ClassNotFoundException {
    Application app = (Application)clazz.newInstance();
    app.attach(context);
    return app;
    }
    “`
    这个方法好像没有用到我们自己写的 Application,就是默认的 Application
    @maninfog
    @zpxshl

  • 主 資深大佬 : kerb15

    哦哦哦,我知道了,我犯糊涂了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具