js判断对象类型:简单明了判断对象类型的窍门技巧

     、向上转型和向下转型   对象类型转换在Java语言平台中经常遇到主要包括向上转型和向下转型操作开发人员需要熟练掌握这两个转型思路方法以及其中容易出错地方如何来了解这两个转型区别呢?笔者认为个现实例子作为比喻可能会更加容易理解

  如现在有动物、鸟类、燕子 3个名词他们的间有什么关系呢?通常我们都会首燕子是特殊鸟类或者说燕子是鸟类为此从对象定义来看鸟类就是个父类而燕子就是个子类或者说燕子对象就是个鸟类对象笔者这里要强调点就是由于燕子是鸟类个对象所以鸟类所具有特性燕子全部具有而燕子所具有特性(如迁徙)则鸟类不定都具有在这个例子中燕子也是种鸟类为此可以将燕子对象堪称是个鸟类对象这种思路方法在Java语言环境中就叫做“向上转型”从这个例子中可以看出向上转型是个从较抽象类型类(鸟类)向比较具体类(燕子)过度由于具体类(燕子)具有抽象类(鸟类)全部特性所以在这个转换过程中是不会有问题这就好像个逻辑判断题说燕子是鸟类其具有鸟类全部特性这个命题至少到现在为止是完全正确

  但是在实际工作中我们还经常会遇到向下转型情况也就是说从个抽象类中(鸟类)引用具体类(燕子)中对象也就是说我们可以说燕子是鸟类但是现在反过来如果说鸟类就是燕子那显然就是以偏概全了燕子并不具有其他鸟类特性如鸽子特性燕子就没有所以在应用开发中如果将父类对象赋值给子类对象就可能有问题如果硬要这么做则很有可能发生编译器父类对象并不定是子类例子这是什么意思呢?即所说鸟类(父类对象)并不定是子类对象(燕子)鸟类对象还有可能是鸽子、白鹭等等所以如果将父类对象给子类对象那么就会出现问题   

        2、如何实现向下转型?

  由于向上转型般都是安全即将个子类对象直接赋值给父类对象般被认为是安全如燕子是鸟类在哪里都是成立所以在向下转型时不需要采用其他关键字我们常常把向下转换叫做隐式转换但是在这里向上转换是种不安全转换方式如说鸟类就是燕子这种说法无论在哪里都说不过去为此默认情况下进行向下转型时往往会发生编译器

  般情况下越是具体对象所具有特性越多如燕子特性就比鸟类特性多而越抽象对象反而具有特性越少其只具有些抽象对象共性特征在进行向下转型操作时将特性范围小对象转换为特性范围大对象肯定会出现问题为此在向下转型时必须确保转换后不会出现问题即具体对象特性在抽象对象中也全部具备只有如此才能够进行转换而且即使满足这个条件编译器也不不能够进行隐式转换而是需要采用关键字进行强制转换如子类对象名字=(子类名)父类对象名字如果上面这个语法就可以实现对象类型强制转换

  笔者在此强调在进行向下转型时定要进行强制转换即通过子类对象名字=(子类名)父类对象名字进行赋值而不能够向向上转型那样进行隐式转换

   3、确保向下转型准确性

  从以上分析中可以看出向下转型往往被认为是不安全当在中执行向下转型操作时候如果父类对象不是子类对象例子就会发生编译器所以在执行向下转型的前要先作件事情就是判断父类对象是否为子类对象例子也就是说先要想燕子就是鸟类这个命题是否成立(在某些特定情况下这个伪命题可能会成立如燕子特性和鸟类特性完全致)只有如此向下转型才不会出现问题在进行向下转型操作时将特性范围小对象转换为特性范围大对象肯定会出现问题但是如果两个转换对象特性范围样大可那么就不会有问题了

在应用开发中往往通过操作符instanceof来完成这个判断即可以利用这个操作符来判断是否个雷实现了某个接口也可以用来判断个例子对象是否属于个类这个操作符基本格式为:A(某个类对象引用) instanceo(操作符号) B (某个类名称)这个操作符最后返回个布尔值如果是false则介绍说明A对象不是类B例子对象相反如果返回值是true则介绍说明对象A是类B例子对象

   4、向下转型注意事项

  在进行向下转型时需要注意以下几方面内容:

  是要慎用向下转型由于向下转型容易出问题为此不到万不得已时候最好不用使用向下转型条条道路通罗马如果在编程的前合理规划类往往可以避免向下转型发生只有其他路走不通情况下才考虑通过向下转型技术来解决问题

   2是在进行向下转型时候需要做两件事情定要使用instanceof操作符来判断转型合法性即判断父类对象是否为子类对象例子这就好像在编写 4则运算时要判断除数不为零这是必须要做也是员必须要养成个习惯在进行向下转型时就自然而然会想到需要进行这个判断只有如此应用才能够降低而且还能够满足区别需求 2是需要注意向上转型和向下转型区别般情况下向上转型往往被认为是安全所以在Java语言平台中向上转型采用是隐式转型而向下转型由于特性范围大小区别为此往往被认为是不安全故系统默认情况下进行向下转型时必须采用强制转型方式如果不采用强制转型则即使满足向下转型条件其也会发生编译器所以需要切记向下转型必须要采用强制转型

   3是需要做好备注等注释工作由于像向下转型等操作是容易出现问题地方为此在进行类似操作时最好在行注释或者块注释中能够进行介绍说明这对于后续维护和代码升级是很有帮助好记性不如烂笔头如果没有做好相关注释这次可能没有问题但是下次再代码升级或者其他原因需要调整或者重写原有代码时就可能会疏忽而导致转型失败

  最后笔者再次提醒各位向上转型大家可以放心大胆但是在使用向下转型技术时大家要慎重要按部就班(先判断后使用)进行操作

Tags:  js判断是对象 js判断对象 判断推理技巧 js判断对象类型

延伸阅读

最新评论

发表评论