2011-09-14 45 views
4

例如,如果构造函数内部发生错误(例如传入的参数无效),并且我想停止正在创建的对象,则可以返回null而不是对新对象的引用。 (在这种情况下,我知道术语return在技术上是正确的,但你知道我的意思)。基本上,是否可以取消创建对象?在施工过程中是否可以停止创建对象?

请指引我走出这个问题...

回答

9

是的,你可以抛出一个异常,这将终止创建对象。您不能从构造函数返回null或任何其他值。

0

使用getters和setters方法为参数设置值,并在值无效时抛出异常,或者显示无法创建对象的消息框。

UPDATE

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); 
} 
} 

像这个西门

+0

我没说要创建对象..... – MStp

+0

你打算如何在未创建的对象上调用setter方法? – SimonC

+0

public class A私人字符串名称; \t公共无效SETNAME(字符串名称){ \t \t如果(name.equals(空)|| name.equals( “”)) \t \t \t抛出新抛出:IllegalArgumentException( “名称不能为空或为空”) ; (字符串名称){ } \t \t SetName(name); \t} } – MStp

7

如果传入的参数是无效的,你应该抛出一个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 

    } 

} 
相关问题