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