Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:用try-catch块函数包装代码?_Java_Casting - Fatal编程技术网

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

Java:用try-catch块函数包装代码?,java,casting,Java,Casting,我有几个将对象强制转换为显式类型的函数 问题是,创建此对象时,类型可能与我要强制转换的类型不匹配。沿着这条路线的某个地方发生了一些转换。但是,代码可能永远不会达到这些转换。事实并非如此 因此,当代码到达将进行铸造的点时,我所需要做的就是将零件放入try-catch块中。事实上,我甚至不需要以任何特殊的方式处理异常 但是我有很多这样的功能。我想知道是否有某种方法可以用try-catch块包装代码行,而不必实际写出try-catch块。如果我可以调用某个函数,那么它将自动执行 try {

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

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

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

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

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


注意:当我发现ClassCastException时,我什么也不做。如果无法正确强制转换对象,也可以,但我需要捕获异常,以便代码执行不会跳转到其他位置。

尝试为您创建一个执行此操作的通用方法

private MyTypeOfObject cast (Object obj) {

    try {

       // your casting code
       return newObj;

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

}

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


更严重的是-嗯,这很严重-您无法捕获异常并让调用方处理它。

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

public static <I, O> O cast(I input, Class<O> outClass) {
    try {
        return outClass.cast(input);
    } catch (ClassCastException e) {
        return null;
    }
}
但您也可以改进代码以避免异常:

public static <I, O> O cast(I input, Class<O> outClass) {
    if(outClass.isAssignableFrom(input.getClass())) {
        return outClass.cast(input); 
    } else {
        return null;
    }
}
公共静态O型广播(I输入,类输出){
if(outClass.isAssignableFrom(input.getClass())){
返回outClass.cast(输入);
}否则{
返回null;
}
}

我不知道该怎么做(除了@trandry_Wombat所说的),但如果我站在你的立场上,我会编写一个简单的代码生成器,使用类似模板引擎或更高级的引擎来处理这些重复/样板案例。每个页面上都有关于位置的教程。

您正在寻找一些自动化工具来减少键入,我不认为存在这样的工具,有一些很棒的代码完成工具,但您所谈论的可以放置特定代码位的工具似乎有点未来主义。
很抱歉造成失望。

在“捕获”栏中返回什么?根据OP问题,我无法确定如果他遇到CCE,他会做什么。可能return
null
就可以了。然后选项是1)null检查而不是try/catch,或者2)抛出NPE而不是CCE。我知道我很严厉,但在我看来,这种方法并不能解决任何问题。我的观点是正确的。但在我看来,这里的问题是
如何避免重复公共代码
。在某种程度上,答案是使用一种通用的方法。这是有效的。也可以投射一组对象吗?如何将数组作为参数传入?例如,如何将Integer.class更改为整数数组?是的,它是
Integer[]I=新整数[2];编号[]n=铸件(i,编号[]。等级)我存储了其他数据,除非捕获异常,否则不会返回这些数据。我进行转换的部分只是我最终返回的数据类的一部分。
public static <I, O> O cast(I input, Class<O> outClass) {
    if(outClass.isAssignableFrom(input.getClass())) {
        return outClass.cast(input); 
    } else {
        return null;
    }
}