Sepertinya saya tidak dapat mengakses anggota instance dari kelas sekitar dari dalam enum, karena saya bisa dari dalam kelas dalam. Apakah itu berarti enum bersifat statis? Apakah ada akses ke cakupan instance kelas di sekitarnya, atau apakah saya harus meneruskan instance tersebut ke metode enum di mana saya membutuhkannya?
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;
}
}
Jawaban:
Ya, enum bersarang secara implisit statis.
Dari spesifikasi bahasa bagian 8.9 :
sumber
Tidaklah masuk akal untuk membuat kelas enum dalam tingkat instans (non-statis) - jika instans enum itu sendiri terikat ke kelas luar, mereka akan melanggar jaminan enum -
misalnya jika Anda punya
Agar nilai enum berfungsi dengan benar sebagai konstanta, (psuedocode, mengabaikan pembatasan akses)
b1 dan b2 harus menjadi objek yang sama.
sumber