Thông báo lỗi gây nhầm lẫn.
Vấn đề là khi bạn cung cấp mã giá trị enum, bạn đang tạo một lớp phụ ẩn danh của enum. (Lớp của nó sẽ là EnumWithAbstractMethodAndMembers$1
) Một lớp con không thể truy cập các thành viên riêng của siêu lớp của nó, tuy nhiên các lớp lồng nhau có thể thông qua phương thức accessor được tạo ra. Bạn sẽ có thể truy cập vào trường riêng tư và thông báo lỗi mà nó cung cấp cho bạn có vẻ như đang dẫn đến lỗi.
BTW Bạn có thể sử dụng điều này, nhưng bạn không cần phải IMHO.
public int addValue(final int value) {
return super.memberVariable + value;
}
Dưới đây là một ví dụ ngắn tôi sẽ đăng nhập như một lỗi trong các thông báo lỗi vì nó không dẫn đến một giải pháp cho vấn đề.
public enum MyEnum {
One {
public int getMemberVariableFailes() {
// error: non-static variable memberVariable cannot be referenced from a static context
return memberVariable;
}
public int getMemberVariable2OK() {
return memberVariable2;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
};
private final int memberVariable = 1;
final int memberVariable2 = 1;
}
Dựa trên phản hồi của Tom Hawkin của, ví dụ này nhận được thông báo lỗi tương tự.
public class MyNotEnum {
// this is the static context in which the anonymous is created
public static final MyNotEnum One = new MyNotEnum() {
public int getMemberVariableFailes() {
// error: non-static variable memberVariable cannot be referenced from a static context
return memberVariable;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
};
private final int memberVariable = 1;
}
để so sánh
public class MyNotEnum {
public class NestedNotEnum extends MyNotEnum {
public int getMemberVariableFailes() {
// compiles just fine.
return memberVariable;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
}
private final int memberVariable = 1;
}
Nguồn
2011-12-09 08:38:01
hợp lý của âm thanh. Thx cho câu trả lời và gợi ý với 'siêu'. – Andreas
Tôi đã đăng nhập nó dưới dạng lỗi 'javac'. –
Họ nói rằng nó sẽ được hiển thị trong một vài ngày. http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7119746 Tôi đã nhận thấy Oracle chấp nhận lỗi của tôi ** nhanh hơn ** nhiều so với Sun. –