[解決済み] 配列は変数に解決できない - Java
2022-02-16 16:51:41
質問
従業員クラスがあります。
public abstract class Employee {
private String firstName;
private String lastName;
private int joinYear, joinMonth, joinDay;
LocalDate startDate;
static int idCounter=0;
private double employeeId;
private double numEmployees;
Employee[] employeeArray = new Employee[10];
private double monthlyEarnings;
// constructor
public Employee(String first, String last, int year, int month, int day) {
firstName = first;
lastName = last;
joinYear=year;
joinMonth=month;
joinDay=day;
startDate= new LocalDate(joinYear, joinMonth, joinDay);
this.monthlyEarnings=0;
this.setEmployeeId(idCounter);
employeeArray[idCounter]=this;
idCounter++;
numEmployees++;
}
}
上で見たように、コンストラクタで、従業員オブジェクトが作成されると、employeeArrayに追加されます。
employeeArray[idCounter]=this;
そして、メインメソッドで配列のメンバーにアクセスしようとすると、エラー "employeeArray Cannot Be Resolved To a Variable" が発生します。
public class Test {
// test Employee hierarchy
public static void main(String args[]) {
Employee Employee1 = new Employee("John", "Smith", 1997, 8, 20);
Employee Employee2 = new Employee("Bob", "Oak", 1999, 6, 20);
System.out.println(employeeArray[1]); //error here
}
}
解決方法は?
明確に
employeeArray
はメインスコープから外れています。それを参照するには
(instance of Employee).employeeArray
.
しかし、Employee クラスのロジックが壊れているため、このケースは全く関係ありません。問題は、あなたの
idCounter
と
employeeArray
のすべてのインスタンスで共有されるわけではありません。
Employee
. その代わりに Employee の各インスタンスは独自のリストとカウンターを持ちます (これは一見、必要ないように見えます)。
実のところ、このような場合には
静的
の配列は
Employee
をクラス自体の中で使用します。を使うのがより適切であると思われます。
List<Employee>
の代わりに
Employee[]
というのも、(おそらく)事前に何人の従業員を保存する必要があるか分からないからです。
以下は、クラスを設計する際のポイントです。
public class Employee {
private static List<Employee> employees = new ArrayList<>();
// Your instance fields here
int employeeId;
public Employee() {
// Constructor stuff
this.employeeId = employees.size();
employees.add(this); // Add the new employee to the list
}
public static List<Employee> getEmployees() {
return employees;
}
}
関連
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】Mockitoでモックからチェックされた例外を投げる
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】「'void' type not allowed here」エラーの原因とは?
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み】Javaクラスの "型に解決できない"
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】Javaメソッドスタブ
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。