2013-02-13 13 views
46

Ne yapmak deneyin şudur:Neden Java'da bir iç sınıfta bir enum oluşturamıyorum?

public class History { 
    public class State { 
     public enum StateType { 

Eclipse StateType bana bu derleme hatası verir: The member enum StateType must be defined inside a static member type.

State sınıfını statik yaptığımda hata kayboluyor. State statik yapabilirim, ancak neden bir iç sınıfta bir enum bildiremediğimi anlamıyorum. İç içe türleri olarak tanımlanmıştır

+1

lütfen şuna bir göz atın: http://stackoverflow.com/questions/700831/java-local-enums –

+1

Durumda Geçmişi yöntemlere erişmek istemediyseniz, Durumu [statik sınıf] yapın (http: // stackoverflow.com/a/1353326/2054731). – ArneHugo

cevap

2

Zaten yeterli bilgi + Joachim Sauer, sadece bazı ek detaylar ekliyorum.

İç numarayı yalnızca iç sınıfınız statik iç içe iç sınıf ise tanımlayabilirsiniz.

enum Suit {SPADES, HEARTS, CLUBS, DIAMONDS} 

Java derleyici sentetik olarak sizin için aşağıdaki sınıf üretecek:

final class Suit extends java.lang.Enum<Suit> { 
    public static final Suit SPADES; 
    public static final Suit HEARTS; 
    public static final Suit CLUBS; 
    public static final Suit DIAMONDS; 
    private static final Suit[] $VALUES; 
    public static Suit[] values(); 
    public static Suit valueOf(java.lang.String); 
    private Suit(); 
} 

diğer yaratmak için hiç niyeti yoktur böyle bir enum ilan ederse

private static class DbResource { 

    public enum DB { 
     MERGE_FROM, MERGE_TO, MAIN; 
    } 
} 
3

aşağıya bakın Bu sınıfın halihazırda tanımlanmış statik alanlarından başka örnekleri (özel kurucusundan çıkarabileceğiniz gibi), ama en önemlisi ve kabul edilen cevapta belirtildiği gibi, bir iç sınıf, statik üyelere sahip olamaz (JLS §8.1.3. Inner Classes and Enclosing Instances) ve enum sentetik sınıfı yaptığı için, iç sınıf olarak kabul edilemez yapar.

+0

Buraya nasıl geldin? :) –

+0

Ne demek istiyorsun? –

İlgili konular