例如,如果构造函数内部发生错误(例如传入的参数无效),并且我想停止正在创建的对象,则可以返回null而不是对新对象的引用。 (在这种情况下,我知道术语return在技术上是正确的,但你知道我的意思)。基本上,是否可以取消创建对象?在施工过程中是否可以停止创建对象?
请指引我走出这个问题...
例如,如果构造函数内部发生错误(例如传入的参数无效),并且我想停止正在创建的对象,则可以返回null而不是对新对象的引用。 (在这种情况下,我知道术语return在技术上是正确的,但你知道我的意思)。基本上,是否可以取消创建对象?在施工过程中是否可以停止创建对象?
请指引我走出这个问题...
是的,你可以抛出一个异常,这将终止创建对象。您不能从构造函数返回null或任何其他值。
使用getters和setters方法为参数设置值,并在值无效时抛出异常,或者显示无法创建对象的消息框。
public class A {
private String Name;
public void SetName(String name) {
if (name.equals(null) || name.equals(""))
throw new IllegalArgumentException("name can not be null or empty");
}
public A(String name) {
SetName(name);
}
}
像这个西门
如果传入的参数是无效的,你应该抛出一个IllegalArgumentException
用描述性的消息。应该抛出NullPointerException
以防非法值为null
。
下面是一个BigCar
类的示例,要求其引擎大于4000 CC。
public class BigCar {
private final Engine engine;
public BigCar(Engine engine) {
if (engine == null)
throw new NullPointerException("Must provide an engine to our car");
if (engine.getCC() <= 4000)
throw new IllegalArgumentException(
"Engine should be bigger than 4000 CC");
this.engine = engine;
}
public static void main(String... args) {
// Size of engine is 2000CC
Engine engine = new Engine(2000);
BigCar myBigCar = new BigCar(engine); // Exception; Engine should be
// bigger than 4000 CC
}
}
我没说要创建对象..... – MStp
你打算如何在未创建的对象上调用setter方法? – SimonC
public class A私人字符串名称; \t公共无效SETNAME(字符串名称){ \t \t如果(name.equals(空)|| name.equals( “”)) \t \t \t抛出新抛出:IllegalArgumentException( “名称不能为空或为空”) ; (字符串名称){ } \t \t SetName(name); \t} } – MStp