- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是编程新手,正在学习 Java 作为我的第一门 oo 语言,方法是阅读 David J. Eck 的 Introduction to Programming Using Java 并在遇到困难时阅读论坛帖子。
我的问题可以被视为 Java Class Constructor Parameters with range limits 的后续问题它处理将 Hour 类的构造函数的 int 参数限制为 0 到 23。
上述问题的答案提到抛出 Instantiation Exception 或 IllegalArgumentException,但不清楚哪种方式更好。
此外,与验证代码相关的开销何时(如果有的话)是否合理?
最佳答案
只有抛出 IllegalArgumentException
才是正确的.
Thrown to indicate that a method has been passed an illegal or inappropriate argument.
安InstantiationException
是为了不同的目的。
Thrown when an application tries to create an instance of a class using the newInstance method in class
Class
, but the specified class object cannot be instantiated. The instantiation can fail for a variety of reasons including but not limited to:
the class object represents an abstract class, an interface, an array class, a primitive type, or
void
the class has no nullary constructor
InstantiationException
与未能调用构造函数的反射调用有关,但 IllegalArgumentException
表示成功调用了构造函数(或方法),但 block 代码确定参数不合适。
总是最好有一点开销来验证传入构造函数(和方法)的参数。一个不能正常工作的程序或类比一个正常工作的程序更糟糕,并且可能慢得可以忽略不计。
关于java - 构造函数应该何时以及如何对实例变量施加限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25194009/
我是一名优秀的程序员,十分优秀!