2009-03-19 16 views
106

İç sınıfa ait bir iç sınıftan alabildiğim gibi, çevre sınıfın örnek üyelerine bir enum içinden erişemiyorum. Bu, enumların statik olduğu anlamına mı geliyor? Çevresindeki sınıfın örneğinin kapsamına erişim var mı, yoksa örneği enumun yöntemine ihtiyacım olan yere mi iletmeliyim?Java'da, bir sınıf statik içinde enum türleri nelerdir?

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; 
    } 
} 
+0

Açıklamaya çalıştığınız şeyi tam olarak anladığımdan emin değilim. belki küçük bir kod örneği verebilir misin? – Pete

cevap

160

Evet, iç içe enumlar dolaylı olarak statiktir. language specification section 8.9 itibaren

:

İçiçe enum türü örtülü statiktir. için statik olarak iç içe enum tipi bildirmek için izin verilir.

44

Bir örnek düzeyinde (statik olmayan) iç enum sınıfı yapmak mantıklı olmaz -

- enum örnekleri kendileri dış sınıfa bağlı yapılsa enum garanti kırardım Örneğin Düzgün (erişim kısıtlamaları göz ardı psuedocode) sabitler, gibi davranmaya numaralandırma değerleri için

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

olsaydı

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

b1 ve b2 aynı nesneler olması gerekir.