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

时间:2016-02-18 05:20:20

标签: java casting

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

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

因此,当代码到达将要发生转换的点时,我需要做的就是将该部分放入try catch块。事实上,我甚至不需要以任何特殊方式处理异常。

但我有很多这些功能。我想知道是否有一些方法用try catch块包装代码行而不实际写出try catch块。如果我可以调用一些函数,那将会自动执行。

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

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

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

5 个答案:

答案 0 :(得分:2)

您可以编写这样的方法为您进行投射,同时忽略任何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;
    }
}

答案 1 :(得分:0)

尝试创建一个为您执行此casting

的常用方法
private MyTypeOfObject cast (Object obj) {

    try {

       // your casting code
       return newObj;

    } catch (ClassCastException ee) {
          // log and ignore
          return null; // ????
    }

}

答案 2 :(得分:0)

不是真的,因为这没有任何意义。如果在捕获异常时没有什么需要做的,那么根本不要调用该操作并删除之后的所有代码。如果操作成功或失败并不重要,那么请不要在第一时间调用它。

更严重的是 - 嗯, 严重 - 你可以捕获异常并让调用者处理它。

答案 3 :(得分:0)

我知道没有做到这一点(除了@Scary_Wombat所说的)但如果我在你的鞋子里,我会写一个简单的代码生成器来处理这些重复/样板情况使用一些模板引擎例如Freemarker或更高级的Antlr。每个地方都有关于这个地方的教程。

答案 4 :(得分:0)

你正在寻找一些自动化来减少你的打字,我不认为这样的工具存在,有一些很棒的代码完成工具,但你正在谈论的那个可以放置一些特定的代码似乎有点未来。                                       对不起导致失望。