我有几个函数,我将对象强制转换为显式类型。
问题是,创建此对象时,类型可能与我要转换的类型不匹配。沿线的某处有一些转换发生。但是,代码可能永远不会达到这些转换。事实并非如此。
因此,当代码到达将要发生转换的点时,我需要做的就是将该部分放入try catch块。事实上,我甚至不需要以任何特殊方式处理异常。
但我有很多这些功能。我想知道是否有一些方法用try catch块包装代码行而不实际写出try catch块。如果我可以调用一些函数,那将会自动执行。
try
{
// cast something
}
catch( ClassCastException e )
{
}
相反,我想调用一个将try catch块放在// cast something
周围的方法。有没有办法做这样的事情?
注意:当我捕获ClassCastException时,我什么都不做。如果我无法正确地转换对象,这是可以的,但我需要捕获异常,这样代码执行就不会跳转到其他地方。
答案 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)
你正在寻找一些自动化来减少你的打字,我不认为这样的工具存在,有一些很棒的代码完成工具,但你正在谈论的那个可以放置一些特定的代码似乎有点未来。 对不起导致失望。