【问题标题】:ClasscastException handling issuesClasscastException 处理问题
【发布时间】:2018-03-21 17:02:42
【问题描述】:

我浏览了如下代码之一,

try{ 
    ((classA) object).setCustomContext(currentObjectContext.getContext()) 
}catch(ClassCastException e){
    // In that case convert it into classB as not classA
    // and conversion code is written below 
}

问题/关注/查询:

  1. instanceOf() 没有被使用,这很好,但我们仍然需要捕获 runtimeException 来处理这种类型的刺激。
  2. 对于上述场景,我们需要识别对象的类型并需要转换为相应的类,而不是在捕获异常之前捕获异常并处理到 classB?
  3. 据我所知,每次通过这种方式处理运行时异常来解决运行时异常都是不正确的/当这段代码有大量流量时,这是一种好的 Java 做法。
  4. 对于这种类型的处理,任何人都有更好的解决方案

(请注意 classA 和 classB 来自不同的第三方库)

【问题讨论】:

    标签: java exception


    【解决方案1】:

    我不确定这里的实际问题是什么,因为您自己已经回答了很多:在将对象转换为特定类型之前,在 if/else 语句中使用 instanceof、.isInstance() 或 .isAssignableFrom()确保转换不会失败(如果无法进行转换,它还可以为您提供更好的错误处理)。 IE。类似:

    if (object instanceof classA) {
      ((classA) object).setCustomContext(currentObjectContext.getContext())
    } else if (object instanceof classB) {
      ((classB) object).setCustomContext(currentObjectContext.getContext())
    } else {
      throw new IllegalStateException("Object is of unsupported type: "+object.getClass());
    }
    

    如果这不是您想要的,请澄清您的问题。

    【讨论】:

    • 不寻找... 寻找更好的方法来解决这个问题
    • 那么这个问题需要更多的上下文。为什么 instanceof 不是您正在寻找的解决方案?就目前而言,您的问题非常狭窄。
    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 2020-05-24
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    相关资源
    最近更新 更多