コンストラクターでクラスの set メソッドを使用して、初期化する値をチェックし、設定した制約に準拠していない場合は例外をスローしたいと考えています。
コード例:
public class MyClass {
// Fields
private int number;
private String string;
// Constructor
public MyClass(int number, String string) {
setNumber(number);
setString(string);
}
// Set Methods
public void setNumber(int number) {
if (number<=0) { // Certain constrain for number
throw new IllegalArgumentException("Number must be positive");
}
this.number = number;
}
public void setString(String string) { // Certain constrain for string
if (string.equals("")) {
throw new IllegalArgumentException("string cannot be empty");
}
this.string = string;
}
public String toString() {
return String.format("Ordered %d x %s%n", number, string);
}
public static void main(String[] args) {
MyClass obj = new MyClass(8, "Souvlaki"); // Everything allright
System.out.println(obj);
try {
MyClass obj2 = new MyClass(-3, "Mousaka"); // Error in number argument
} catch (IllegalArgumentException exception) { // catch the exception
System.out.printf("Exception Caught: Number must be positive%n%n");
}
MyClass obj2 = new MyClass(4, ""); // Error in string argument
// Allow the exception to end program execution
}
}
出力:
8 x スブラキを注文
キャッチされた例外: 数値は正でなければなりません
スレッド「メイン」の例外 java.lang.IllegalArgumentException: MyClass.main(MyClass.java:40) の MyClass.(MyClass.java:10) の MyClass.setString(MyClass.java:23) で文字列を空にすることはできません
出力はまさに私が望んでいたものです。最初に作成されたオブジェクトは、適切な値で初期化されます。toString() メソッドを呼び出すと、暗黙的にそれが証明されます。2 番目と 3 番目のオブジェクトは、初期化が間違っているために例外をスローします。プログラムの実行を継続できるようにするために、最初の例外がキャッチされます。2 番目の例外は、例外として出力されるエラー メッセージを出力するためにキャッチされません。
すべてが正しいように見えますが、これは優れたプログラミング手法ですか、それとも内部にいくつかのバグを隠していますか?