# enum Fehlermeldung "The public type Day must be defined in its own file"



## Xenon (8. Feb 2011)

Hallo Forum!

ich habe folgendene Datei angelegt mit "Eclipse Helios". Leider meckert 


```
Zeile mit Enum: The public type Day must be defined in its own file

Zeile mit import class: 
            Multiple markers at this line
	- The type java.lang.Enum cannot be resolved. It is indirectly 
	 referenced from required .class files
	- The type Enum is not generic; it cannot be parameterized with 
	 arguments <Day>
	- The type java.lang.Enum cannot be resolved. It is indirectly 
	 referenced from required .class files
```

warum?! wenn ich richtig verstanden habe will eclipse die enum Liste wo anderes haben/in einem exernen file? 

hier ist mein quellcode

```
import java.util.*;

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
}

public class EnumTest {
	Day day;
	
	public EnumTest(Day day) {
		this.day = day;
	}
	
	public void tellItLikeItIs() {
		switch (day) {
			case MONDAY: System.out.println("Mondays are bad.");
					     break;
					
			case FRIDAY: System.out.println("Fridays are better.");
					     break;
					     
			case SATURDAY:
			case SUNDAY: System.out.println("Weekends are best.");
					     break;
					     
			default:	 System.out.println("Midweek days are so-so.");
					     break;
		}
	}
	
	public static void main(String[] args) {
		EnumTest firstDay = new EnumTest(Day.MONDAY);
		firstDay.tellItLikeItIs();
		EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
		thirdDay.tellItLikeItIs();
		EnumTest fifthDay = new EnumTest(Day.FRIDAY);
		fifthDay.tellItLikeItIs();
		EnumTest sixthDay = new EnumTest(Day.SATURDAY);
		sixthDay.tellItLikeItIs();
		EnumTest seventhDay = new EnumTest(Day.SUNDAY);
		seventhDay.tellItLikeItIs();
		
		
	}
}
```


----------



## tfa (8. Feb 2011)

Du brauchst für jedes enum eine eigene Quelltext-Datei (da diese Typen public sind).


----------



## SlaterB (8. Feb 2011)

alternativ könnte Day innerhalb der Klasse EnumTest definiert werden


----------



## Xenon (8. Feb 2011)

hallo tfa!
sorry bin ein newby kannst Du bitte erklären wie man das macht. Muss ich ein .java file anlegen und in dieses enum kopieren?
Muss ich beim kompilieren etwas beachten und wie "includiere" ich den file. DANKE!


tfa hat gesagt.:


> Du brauchst für jedes enum eine eigene Quelltext-Datei (da diese Typen public sind).


----------



## Andi_CH (8. Feb 2011)

```
public class EnumTest {

	public enum Day {
	    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
	    THURSDAY, FRIDAY, SATURDAY 
	}

	Day day;
    
    public EnumTest(Day day) {
        this.day = day;
    }
    
    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY: System.out.println("Mondays are bad.");
                         break;
                    
            case FRIDAY: System.out.println("Fridays are better.");
                         break;
                         
            case SATURDAY:
            case SUNDAY: System.out.println("Weekends are best.");
                         break;
                         
            default:     System.out.println("Midweek days are so-so.");
                         break;
        }
    }
    
    public static void main(String[] args) {
        EnumTest firstDay = new EnumTest(Day.MONDAY);
        firstDay.tellItLikeItIs();
        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
        thirdDay.tellItLikeItIs();
        EnumTest fifthDay = new EnumTest(Day.FRIDAY);
        fifthDay.tellItLikeItIs();
        EnumTest sixthDay = new EnumTest(Day.SATURDAY);
        sixthDay.tellItLikeItIs();
        EnumTest seventhDay = new EnumTest(Day.SUNDAY);
        seventhDay.tellItLikeItIs();
    }
}
```


----------



## Xenon (8. Feb 2011)

Danke für den Tipp


SlaterB hat gesagt.:


> alternativ könnte Day innerhalb der Klasse EnumTest definiert werden



die eine Fehlermeldung wird jetzt nicht mehr angezeigt was aber noch bleibt die Meldung

```
Multiple markers at this line
	- The type Enum is not generic; it cannot be parameterized with 
	 arguments <EnumTest.Day>
	- The type java.lang.Enum cannot be resolved. It is indirectly 
	 referenced from required .class files
	- The type java.lang.Enum cannot be resolved. It is indirectly 
	 referenced from required .class files
```


----------



## Andi_CH (8. Feb 2011)

... oder die andere Variante:

In einer eigenen Datei Namens Day.java

```
public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY 
}
```

und in EnumTest die Deklaration der Klasse Day löschen.

Fehlermeldungen oder Warnungen gibt es bei mir keine. (In beiden Fällen nicht)


----------



## SlaterB (8. Feb 2011)

die Fehlermeldung klingt für mich nach Java-Version < 1.5

was liefert [c]java -version[/c] in der Konsole?

bzw. unter Eclipse kann es auch nur eine falsche Einstellung sein





wobei ich dann andere Fehlermeldungen erhalte, 
auch die verwendete Java-Version bzw. JRE ist dann wieder interessant:


----------



## Xenon (8. Feb 2011)

Danke SlaterB für den Hinweis!

Es kommt tatsächlich auf die Java version an bzw. Bibliotheken an. 

Man kann diese Fehlermeldung los werden wenn die jre6 zum Beispiel verwendet wird.
Problem: falsche Bibliothek wird verwendet!
Lösung für eclipse:

Project-> Properties -> Java build path -> Libraries -> die aktuelle version checken, wenn 1.4 -> Edit -> Alternate (6 wählen, diese muss jedoch installiert sein)


----------

