2017-02-16 5 views
2

Поэтому я дал задание в моем назначении, который идет следующим образом:параметров Инициализировать по перечислимому типу

летательного аппарат является PublicTransportation, что в дополнении имеет следующие параметры: тип класса (тип перечисления, который может быть: вертолет, Airline, Glider или Balloon) и тип обслуживания (тип перечисления, который может быть: Еженедельно, Ежемесячно или Ежегодно).

Мы не очень поняли, что такое перечисление, но я пытаюсь узнать об этом. Я знаю, что это список констант (статический и конечный). Я просто не знаю, как инициализировать параметры перечисления в моем классе драйвера.

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

А вот часть моего класса драйвера:

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); 

Как вы инициализировать тип перечисления?

+0

Вы не можете, поскольку перечисления объявлены частными в классе Aircraft. Таким образом, только Aircraft может получить к ним доступ. Переместите их за пределы класса в своем собственном исходном файле Java так же, как и обычный класс верхнего уровня, и используйте ClassType.HELICOPTER. –

ответ

4

изменить декларации в

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

и в классе драйвера

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

Я исправил проблему в вызове конструктора Aircraft угадывая, что планеры получить обслуживание еженедельно :-)

Если вы не хотите вводить полные константы enum, вы можете import static в верхней части файла:

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

, а затем использовать константы перечисления без квалификации. Однако, как отмечает @LewBloch в комментарии, статический импорт может уменьшить читаемость кода. Я сам несколько амбивалентен об их использовании. В определенных обстоятельствах, при наличии достаточной документации/предупреждения в коде, они могут быть полезны. Я вообще избегаю их. Я включил их только для полноты, а не как одобрение.

+0

Иногда это полезно для статически важных констант перечисления, но чаще код становится яснее, если вы импортируете класс. '. 'не является полностью квалифицированным именем. '. . '- полное имя. –

+1

Да, я неоднозначно отношусь к статическому импорту. Я добавлю ваш комментарий к сообщению. –

+0

Отлично, спасибо большое! – JKawa

Смежные вопросы