java rtti进修总结
操作RTTI可按照一个匿名的基本类句柄观测出范例信息。但正是由于这个原因,新手们极易误用它,因为有些时候多形性要领便足够了。对那些以前习惯措施化编程的人来说,极易将他们的措施组织成一系列switch语句。他们大概用RTTI做到这一点,从而在代码开拓和维护中损失多形性技能的重要代价。Java的要求是让我们尽大概地回收多形性,只有在极出格的环境下才利用RTTI。
但为了操作多形性,要求我们拥有对基本类界说的节制权,因为有些时候在措施范畴之内,大概发明基本类并未包罗我们想要的要领。若基本类来自一个库,可能由此外什么对象节制着,RTTI即是一种很好的办理方案:可担任一个新范例,然后添加本身的特别要领。在代码的其他处所,可以侦测本身的特定范例,并挪用谁人非凡的要领。这样做不会粉碎多形性以及措施的扩展本领,因为新范例的添加不要求查找措施中的switch语句。但在需要新特性的主体中添加新代码时,就必需用RTTI侦测本身特定的范例。
从某个特定类的好处的角度出发,在基本类里插手一个特性后,大概意味着从谁人基本类衍生的其他所有类都必需得到一些无意义的“鸡肋”。这使得接口变得寄义恍惚。若有人从谁人基本类担任,且必需包围抽象要领,这一现象便会使他们陷入困扰。好比此刻用一个类布局来暗示乐器(Instrument)。假定我们想洁净管弦乐队中所有适当乐器的通气音栓(Spit Valve),此时的一个步伐是在基本类Instrument中置入一个ClearSpitValve()要领。但这样做会造成一个误区,因为它体现着冲击乐器和电子乐器中也有音栓。针对这种环境,RTTI提供了一个更公道的办理方案,可将要领置入特定的类中(此时是Wind,即“通气口”)——这样做是可行的。但事实上一种更公道的方案是将prepareInstrument()置入基本类中。初学者刚开始时往往看不到这一点,一般会认定本身必需利用RTTI。
最后,RTTI有时能办理效率问题。若代码大量运用了多形性,但个中的一个工具在执行效率上很有问题,便可用RTTI找出谁人范例,然后写一段适当的代码,改造其效率。