2011-09-14 14 views
4

たとえば、コンストラクタ内でエラーが発生した場合(たとえば、パラメータが渡された場合など)、新しいオブジェクトへの参照ではなくnullを返すことができるように、作成中のオブジェクトを停止したいとします。 (この場合、リターンという言葉は技術的には正しいと思っていますが、私の言うことを知っています)。基本的に、オブジェクトの作成をキャンセルすることは可能ですか?建設中にオブジェクトが作成されるのを止めることはできますか?

答えて

9

はい、あなたがオブジェクトの作成を終了します例外をスローすることができます...この問題から抜け出すために私を導いてください。コンストラクタからnullまたはその他の値を返すことはできません。

0

gettersおよびsettersメソッドを使用して、パラメータの値を設定し、値が無効な場合は例外をスローするか、オブジェクトを作成できないというメッセージボックスを表示します。このサイモン

+0

オブジェクトを作成するとは言いませんでした..... – MStp

+0

作成されていないオブジェクトでセッターメソッドをどのように呼び出すのですか? – SimonC

+0

パブリッククラスA { \tプライベート文字列名; \t公共ボイドSetNameメソッド(文字列名){ \t \t場合(name.equals(ヌル)|| name.equals( "")) \t \t \tスロー新しい例外:IllegalArgumentException( "名前" がnullまたは空にすることはできません) ; \t} \t公共A(文字列名){ \t \t SetNameメソッド(名前); \t} } – MStp

7

同様

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

に渡されたパラメータが無効である場合は、わかりやすいメッセージでIllegalArgumentExceptionをスローする必要があります。無効なnull値の場合はNullPointerExceptionを投げるべきです。

エンジンが4000 CC以上であることが必要なBigCarクラスの例を次に示します。

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 

    } 

} 
関連する問題