【发布时间】:2016-04-14 15:52:48
【问题描述】:
我有来自两个不同类的 2 个对象,它们共享一个通用类型的属性(IpAddress 也包含有关子网的所有信息)。现在,IpAddress 是一个用户定义类型,我有一个函数 setSecondaryRouter() 可以改变这种类型的属性。为了使程序按预期运行,我需要一个不变量(或实际上是 2 个不变量)来保持。这在函数setSecondaryRouter() 中进行了检查。但是,我想将此属性 secondaryRouter 在第二个对象中设置为与第一个对象相同。这意味着不变量在我第二次使用setSecondaryRouter() 时已经成立。因此,我知道该函数不会抛出。
问题是我的编译器“帮助”通过不编译来确保我没有未捕获的异常,除非我添加一个 try-catch 子句或在调用函数中添加一个 throws 声明(从而帮助解决一个不存在的问题) .我要做的是告诉Java不会抛出这个异常。将此与 c++ 中的 nothrow 关键字进行比较。我知道已经发布了类似的问题,如下所示
Is there any standard annotation to indicate nothrow semantics in Java?
但我的问题不同,我不想在我知道不会被抛出的特定异常中添加 throw 或 try-catch 子句!
还有一个表达式是 IllegalArgumentException。这个异常可以成为我必须处理异常的原因吗?
【问题讨论】:
-
让他们检查异常。那么,它没有被方法声明为抛出的事实意味着它没有被方法抛出。
-
@AndyTurner 所以即使我知道必须处理运行时异常?
-
不。您不必处理未经检查的异常;你只是不能保证它们不会被扔掉。
-
不,你不能保证它们不会被抛出。