黑马程序员技术交流社区

标题: instanceof和反射判断 [打印本页]

作者: 张森    时间: 2013-1-29 12:47
标题: instanceof和反射判断
请教下各位,判断某个对象是否属于某个类的实例可以用 instanceof关键字
obj instanceof Student

也可以用  obj.getClass.getName.equals(Object.class);

网上都说 尽量不要用 instanceof方式 ,因为instanceof属于硬编码,
但还是没搞懂究竟用instanceof不好在哪里

作者: yong230    时间: 2013-1-29 12:57
在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:

  public double calculate(Bill bill) {
  if (bill instanceof PhoneBill) {
  //计算电话账单
  }
  if (bill instanceof GasBill) {
  //计算燃气账单
  }
  ...
  }
  这样就可以用一个方法处理两种子类。

  然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:

  public double calculate(PhoneBill bill) {
  //计算电话账单
  }

  public double calculate(GasBill bill) {
  //计算燃气账单
  }

  所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。
作者: 张森    时间: 2013-1-29 13:22
yong230 发表于 2013-1-29 12:57
在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象 ...

貌似 你回答的跟我说那个没任何关系哦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2