2013-08-02 47 views
0

我期待这样的事情:Java的断言运行安全

assertSafe(Integer.parseInt(val)) 

这可能吗?

谢谢!

+2

“安全”是什么意思?副作用是免费的? – morgano

+3

为什么不只是一个try/catch? – John

+0

@morgano我的意思是不会有异常会引发! – RGO

回答

2

你想assertSafe捕捉任何异常,并失败,对不对?不幸的是,这对于Java来说是不可能的(至少今天)。一般而言,所有参数在传递给方法之前都必须经过评估。

你可以创建,虽然一个辅助方法:

public static void assertSafeInt(String val) { 
    try { 
     Integer.parseInt(val); 
    } catch (NumberFormatException e) { 
     throw new AssertionError(val + " is not an int"); 
    } 
} 

用法:

assertSafeInt(val); 

不能象一般,你会想我猜?带lambda表达式的Java 8可能会有所帮助,但我不认为语法会像你想的那样干净。

斯卡拉有一种叫做“按名称调用”的东西,它确实将代码块作为函数传递。在Scala中创建assertSafe很容易。

1

类型检查,例如,从JSON字符串中提取值时 - 我想知道为什么它不容易获得。

如果您使用扫描仪,它支持hasNextInt(),hasNextDouble()或hasNextNext()=> String。

通常情况下,你知道什么类型的期望,如果你不解析这个,因为你读它。我会避免阅读一个字符串,我想作为int,这是效率低下。 ;)