转行小白成长路-java篇

第14章:类型信息(下)

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

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

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

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

posted @ 2020-03-08 20:37  疯狂的莹大王  阅读(88)  评论(0编辑  收藏  举报