2017-02-16 62 views
2

所以我给我的任务是去如下任务:初始化参数通过枚举类型

飞机是PublicTransportation,除了有以下几点:类类型(枚举类型,可以是:直升机,航空公司,滑翔机或气球)和维护类型(枚举类型可以是:每周,每月或每年)。

我们还没有真正涵盖枚举是什么,但我试图了解它。我知道他们是一个常量列表(静态和最终)。我只是不知道如何初始化我的驱动程序类中的枚举参数。

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

你不能,因为枚举在飞机类中被声明为私有的。所以只有飞机可以访问它们。移动它们到他们自己的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构造函数的调用问题

如果您不想输入完全限定的枚举常量,则可以在文件顶部输入import static

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

然后使用不带限定条件的枚举常量。但是,正如@LewBloch在评论中指出的那样,静态导入可以减少代码的可读性。我对自己的使用有点矛盾。在特定情况下,如果代码中有足够的文档/警告,它们可能会有用。我通常会避免它们。我只是为了完整而将它们包括在内,而不是作为认可。

+0

有时候静态重要的枚举常量是很好的,但是如果你导入类的话,代码更加清晰。 ''不是完全合格的名称。 ''是一个完全合格的名称。 –

+1

是的,我对静态进口感到矛盾。我会将您的评论添加到帖子中。 –

+0

非常好,非常感谢! – JKawa