2017-02-16 2 views
2

So bin ich eine Aufgabe in meiner Aufgabe gegeben, die wie folgt lautet:initialisieren Parameter von Aufzählungstyp

ein Flugzeug mit einem PublicTransportation ist, dass zusätzlich hat den folgenden: Klassentyp (Aufzählungstyp, der sein kann: Hubschrauber, Airline, Glider oder Balloon) und Wartungstyp (Aufzählungstyp, der: wöchentlich, monatlich oder jährlich sein kann).

Wir haben nicht wirklich behandelt, was Enum ist, aber ich versuche, darüber zu lernen. Ich weiß, dass sie eine Liste von Konstanten (statisch und final) sind. Ich weiß einfach nicht, wie man Enum-Parameter in meiner Treiberklasse initialisiert.

public class Aircraft extends PublicTransportation 
{ 

    private enum ClassType {HELICOPTER, AIRLINE, GLIDER, BALLOON} 
    private enum MaintType {WEEKLY, MONTHLY, YEARLY} 

    private ClassType cType; 
    private MaintType mType; 

    public Aircraft() 
    { 
     super(); 
     cType = null; 
     mType = null; 
    } 

    public Aircraft(double ticketPrice, int numOfStops, ClassType cType, MaintType mType) 
    { 
     super(ticketPrice, numOfStops); 
     this.cType = cType; 
     this.mType = mType;  
    } 

    public Aircraft(Aircraft anAircraft) 
    { 
     super(anAircraft.getTicketPrice(), anAircraft.getNumOfStops()); 
     this.cType = anAircraft.cType; 
     this.mType = anAircraft.mType; 
    } 
} 

Und hier ist ein Stück meiner Treiberklasse:

package Driver; 
import CityBus.CityBus; 
import CityBus.Metro; 
import CityBus.Tram; 
import Ferry.Ferry; 
import Aircraft.Aircraft; 
import Aircraft.Aircraft; 
import PublicTransportation.PublicTransportation; 

public class Driver 
{ 



    public static void main(String[] args) 
    { 

     Aircraft ac1 = new Aircraft(1,2, GLIDER, Aircraft.GLIDER); 

Wie initialisieren Sie einen Aufzählungstyp?

+0

Dies ist nicht möglich, da die Enums in der Klasse Aircraft als privat deklariert sind. Nur Flugzeuge können auf sie zugreifen. Verschieben Sie sie außerhalb der Klasse in einer eigenen Java-Quelldatei, genau wie bei einer regulären Top-Level-Klasse, und verwenden Sie ClassType.HELICOPTER. –

Antwort

4

Ändern Sie die Erklärungen zu

public static enum ClassType {HELICOPTER, AIRLINE, GLIDER, BALLOON} 
public static enum MaintType {WEEKLY, MONTHLY, YEARLY} 

und in der Treiberklasse

Aircraft ac1 = new Aircraft(1,2, Aircraft.ClassType.GLIDER, Aircraft.MaintType.WEEKLY); 

fixiert ich das Problem in der Anrufung des Aircraft Konstruktor durch Erraten, dass Segelflugzeuge Wartung wöchentlich :-)

bekommen

Wenn Sie die vollständig qualifizierten Enum-Konstanten nicht eingeben möchten, können Sie import static an der Spitze der Datei:

import static Aircraft.ClassType.*; 
import static Aircraft.MaintType.*; 

und dann die enum-Konstanten ohne Qualifizierung verwenden. Wie @LewBloch jedoch in einem Kommentar darauf hinweist, können statische Importe die Lesbarkeit von Code reduzieren. Ich bin etwas ambivalent über ihre Verwendung. Unter bestimmten Umständen, mit ausreichender Dokumentation/Warnung im Code, können sie nützlich sein. Ich vermeide sie generell. Ich habe sie nur der Vollständigkeit halber und nicht als Bestätigung hinzugefügt.

+0

Manchmal ist es gut für statisch wichtige Enum-Konstanten, aber häufiger ist der Code klarer, wenn Sie die Klasse importieren. '. 'ist kein vollständig qualifizierter Name. '. . 'ist ein vollständig qualifizierter Name. –

+1

Ja, ich bin über statische Importe ambivalent. Ich werde deinen Kommentar dem Beitrag hinzufügen. –

+0

Das ist ausgezeichnet, vielen Dank! – JKawa