Trong Java, các kiểu enum bên trong một lớp có tĩnh không?


123

Tôi dường như không thể truy cập các thành viên cá thể của lớp xung quanh từ bên trong một enum, như tôi có thể từ bên trong một lớp bên trong. Điều đó có nghĩa là enums là tĩnh? Có bất kỳ quyền truy cập nào vào phạm vi của cá thể của lớp xung quanh hay tôi phải chuyển cá thể đó vào phương thức của enum nơi tôi cần nó?

public class Universe {
    public final int theAnswer;

    public enum Planet {
        // ...
        EARTH(...);
        // ...

        // ... constructor etc.

        public int deepThought() {
            // -> "No enclosing instance of type 'Universe' is accessible in this scope"
            return Universe.this.theAnswer;
        }
    }

    public Universe(int locallyUniversalAnswer) {
        this.theAnswer = locallyUniversalAnswer;
    }
}

Tôi không chắc mình hoàn toàn hiểu những gì bạn đang cố gắng mô tả. bạn có thể cung cấp cho một mẫu mã nhỏ có lẽ?
Pete

Câu trả lời:



45

Sẽ không hợp lý nếu tạo một lớp enum bên trong cấp cá thể (không tĩnh) - nếu bản thân các cá thể enum được gắn với lớp bên ngoài, chúng sẽ phá vỡ bảo đảm enum -

ví dụ nếu bạn có

public class Foo {
   private enum Bar {
        A, B, C;
   } 
}

Để các giá trị enum hoạt động đúng như các hằng số, (mã psuedoc, bỏ qua các hạn chế truy cập)

Bar b1 = new Foo().A
Bar b2 = new Foo().A

b1 và b2 sẽ phải là cùng một đối tượng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.