• 转行小白成长路-java篇


    第14章:类型信息(下)

      这里得纠正一下,昨天有个概念上的错误,就是RTTI和反射是两个概念,这两个本质上的区别是对于RTTI来说编译器编译时打开和检查.class文件,而反射在编译时是不可获取.class文件的。书中是这个意思将RTTI和反射机制分割开来,其实我有点想不通,起码逻辑上有点问题。不论RTTI还是反射在最初加载类的时候都是需要编译器检查类的,这第一步都要获取打开.class文件。就违反了这个分割的概念。但是他们有点不同,在于它们的侧重点不一样,RTTI侧重点在于获取类的信息,而反射的重点在于应用(获取方法,生成对象,处理问题)。所以我私自给他们定义的区别是目的不同,一个是为了获取类型信息,一个是为了解决问题。

      今天的重点在于应用,昨天我们分析了类加载的过程和一些引用的猜测,今天就是对他们的应用:

    • 注册工厂:注册工厂为了应对类型种类多,调用频率高的场景。书中的例子个人觉得还是挺有代表性的,注册工厂不仅有工厂更重要的是注册,生成一个大的容器包括众多类的对象,可以随意生成相应的对象。这种想法或者说这种实现方法和思想有没有可能是从object就开始呢,就是说我们说的堆栈和堆是不是都是一个大的容器。我们都是在两个大容器里来回调用信息。
    • 动态代理:这个动态和静态区别在于静态是将类直接嵌入到类中,动态则是通过中间的方法传参,参杂适配的思想。这些个专有名词可真是烦人,适配的意思通俗讲就是做个小马甲,只要同类谁穿上都可以。这个利用类型的什么信息了?大概是类型的包装。
    • 空对象:空对象最大的作用就是模拟对象和返回桩,这个桩的概念比较复杂。只是返回数据,它通常是重量级,并且经常在测试之间被复用。桩可以根据它们被调用的方式,通过配置进行修改,因此桩是一种复杂对象,他要做很多事。这个是书中的原话。模拟对象还是挺有道理的,桩的概念真的意识不到。以后慢慢理解把。
    • 等价性:instanceof/isInstance()保留了继承的相关概念,但是equals()和==并没有继承的概念,就是前两种导出类对象算是基类对象,但是后两种就不算,后两种只是比较地址。

      大致就这样。明天的泛型真恼火,那么多,大概会用三天把。

  • 相关阅读:
    梯度提升树算法GBDT
    优先队列 priority_queue
    谭平 Vision Course Note 1~2 Recommended Textbook and Camera Basics
    侯捷老师C++基础课程笔记7-栈、堆和内存管理
    侯捷老师C++基础课程笔记6-三大特殊函数
    侯捷老师C++基础课程笔记5-操作符重载与临时对象
    侯捷老师C++基础课程笔记4-参数传递与返回值
    侯捷老师C++基础课程笔记3-构造函数(不含指针变量的class)
    侯捷老师C++基础课程笔记1-2
    C文件处理之24/32位bmp图像的旋转
  • 原文地址:https://www.cnblogs.com/aiwin/p/12444735.html
Copyright © 2020-2023  润新知