私の質問は、stdin
によって初期化されるフィールドを持つJavaクラスのコンストラクタを記述する最適な方法は何ですか?私はこのクラスのすべてのセッターとゲッターを書くことができますJavaフィールドのフィールドがエンドユーザによって供給されているクラスのコンストラクタ
Public class Employee {
private int empID;
private String empName;
private List<Role> empRoles;
{....}
}
:たとえば
は、私がどのように見えるEmployee
クラスを持っていると仮定します。もちろん、Role
クラスには独自のファイルがあります。次のように
また、フィールドを初期化するために、エンドユーザーを有効にするために、私は最初の2つのフィールドのための私のセッターを行うこととします
public void setEmpID() {
System.out.println("Please enter the employee ID");
Scanner s = new Scanner (System.in);
this.empID = s.nextInt();
public void setEmpName() {
System.out.println("Please enter the employee name");
Scanner s = new Scanner (System.in);
this.empName = s.next();
}
その後:
- は、私はそのような使用できますデフォルトの コンストラクタをオーバーライドするコンストラクタのsetterです。
- これは、このようなコンストラクタを作成する最善の方法ですか?
- はそれがより良いセッターのための引数としてコンストラクタに私は、各セッターに作成してい
Scanner
オブジェクトを移動して作ることです
例:
public void setEmpName(Scanner s) {
...
this.empName = s.next();
}
あなたが見ることができるように、この単に「コーディング」ではなく、設計上の疑問であるかもしれません。
ご協力いただきありがとうございます。
このような状況のためのソリューションは、Builderパターンを使用することです。設定したいデータをメソッドに渡します。ファイルの一部のデータに基づいてフィールドを設定する場合はどうなりますか?またはインターネットから? 'Scanner'の使用を強制すると、あなたのクラスがどれだけ役に立つかが本当に制限されます。 – Carcigenicate
setterは、メソッドの引数として設定する値を取得する必要があります。ユーザーの入力は、前に別のポイントで行う必要があります。すべてのユーザー入力を取得するために設計された指定されたメソッドまたはクラス。後で入力ソースを簡単に交換することができ、基底クラスは変更を必要とせず、それははるかにモジュール化されています。 – Zabuza
多くのありがとう。それを得た:) –