我想在构造函数中进行测试,以确定当前是否使用给定参数实例化对象是一个好主意。但是我如何中止并从构造函数向新语句返回警告?在每个“新”声明之前,调用者是否必须进行此类测试?我认为构造函数对它来说是个好地方。
答案 0 :(得分:9)
您可以使用工厂对象。然后,这可以运行您的检查并返回instansiated对象,或null。这可能比例外更有效。
MyObject myObject = MyObjectFactory.createMyObject();
答案 1 :(得分:5)
是的,你在构造函数中抛出一个异常。
在java中,如果其中一个参数是错误的,那么你通常会抛出一个IllegalArgumentException
,这是一个常见的做法,作为一个守护声明:
public class Roman {
public Roman(int arabic) {
// "Guard statement" in the beginning of the constructor that
// checks if the input is legal
if (arabic < 0) {
throw new IllegalArgumentException("There are no negative roman numerals");
}
// Continue your constructor code here
}
}
如果您不想要例外,则可以GavinCatelli's answer创建,并创建一个工厂方法,如果该对象不是“正确”,则返回null。
public class RomanFactory {
public static Roman getSafeRoman(int a) {
Roman r;
try {
r = new Roman(a);
} catch(IllegalArgumentException e) {
r = null;
}
return r;
}
}
你必须检查null,否则程序可能会因NullPointerException而崩溃。
答案 2 :(得分:2)
中止对象构造的唯一可靠方法是在构造函数
完成之前抛出异常答案 3 :(得分:1)
如果参数无效,您可以让构造函数抛出异常。
如果只是输入有效性的问题,调用者应该能够自行检查,那么你应该抛出RuntimeException
。如果它是调用者无法控制的东西,那么构造函数应抛出一个已检查的异常;请注意,这将需要调用构造函数的所有代码来处理或声明异常。
答案 4 :(得分:0)
创建自己的异常类,并根据传递给构造函数的参数传递消息。因此从构造函数中抛出此异常。