有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

铸造Java:使用try-catch块函数包装代码?

我有几个将对象强制转换为显式类型的函数

问题是,创建此对象时,类型可能与我要强制转换的类型不匹配。沿着这条路线的某个地方发生了一些转换。但是,代码可能永远不会达到这些转换。事实并非如此

因此,当代码到达将进行铸造的点时,我所需要做的就是将零件放入try-catch块中。事实上,我甚至不需要以任何特殊的方式处理异常

但是我有很多这样的功能。我想知道是否有某种方法可以用try-catch块包装代码行,而不必实际写出try-catch块。如果我可以调用某个函数,那么它将自动执行

try 
{ 
    // cast something 
} 
catch( ClassCastException e ) 
{ 
}

相反,我想调用一个方法,将try-catch块放在// cast something周围。有没有办法做这样的事

注意:当我发现ClassCastException时,我什么也不做。如果我不能正确地强制转换对象,这是可以的,但是我需要捕获异常,这样代码执行就不会跳转到其他地方


共 (4) 个答案

  1. # 1 楼答案

    尝试创建一个通用方法来为您执行此casting

    private MyTypeOfObject cast (Object obj) {
    
        try {
    
           // your casting code
           return newObj;
    
        } catch (ClassCastException ee) {
              // log and ignore
              return null; // ????
        }
    
    }
    
  2. # 2 楼答案

    据我所知,没有什么可以做到这一点(除了@trandry_Wombat所说的),但如果我站在你的立场上,我会编写一个简单的代码生成器,使用一些模板引擎(如Freemarker或更高级的工具(如Antlr)来处理这些重复/样板案例。每一页都有关于这个地方的教程

  3. # 3 楼答案

    您可以编写这样的方法来执行强制转换,同时忽略任何ClassCastException

    public static <I, O> O cast(I input, Class<O> outClass) {
        try {
            return outClass.cast(input);
        } catch (ClassCastException e) {
            return null;
        }
    }
    

    您可以这样使用它:

    Number n = new Integer(1);
    Integer i = cast(n, Integer.class);
    

    但您也可以改进代码以避免异常:

    public static <I, O> O cast(I input, Class<O> outClass) {
        if(outClass.isAssignableFrom(input.getClass())) {
            return outClass.cast(input); 
        } else {
            return null;
        }
    }
    
  4. # 4 楼答案

    不太可能,因为这没有任何意义。如果捕获异常时无需执行任何操作,则根本不调用该操作,然后删除所有代码。如果操作成功与否无关紧要,那么首先不要调用它

    更严重的是,严重的-您可以捕获异常并让调用方处理它