【问题标题】:Why do I need to import enum classes to use them when I already imported the package they're in? [Java]当我已经导入了它们所在的包时,为什么我需要导入枚举类才能使用它们? [爪哇]
【发布时间】:2020-10-28 04:26:01
【问题描述】:

我对在 Java 中导入包有点困惑。

所以我有一个里面有嵌套枚举类的类:

public class AirCraft extends PublicTransportation 
{
    private AirType classType;
    private TimeType maintainType;
    
    //default constructor
    public AirCraft() {
        super();
        classType = AirType.NONE;
        maintainType = TimeType.NONE;
    }
    
    //nested enums used for AirCraft attributes (2)
    public enum AirType {
        NONE,
        HELICOPTER,
        AIRLINE,
        BALLOON,
        GLIDER
    }
    
    public enum TimeType{
        NONE,
        WEEKLY,
        MONTHLY,
        YEARLY
    }

然后在我的驱动程序类中:

import airTransport.*; //importing the AirCraft class in which resides the two enum classes

public class DriverTransport {

    public static void main(String[] args) {
        //testing AirCraft class methods
        AirCraft secondAir = new AirCraft(50.9, 10, AirType.HELICOPTER, TimeType.MONTHLY);
    }
}

但是,我收到 AirType 和 TimeType 的“无法解析为变量”错误。如果我单独导入它们是固定的,但我想了解为什么即使这两个枚举在 AirCraft 类中,简单地导入 AirCraft 类也不起作用。

谢谢。

【问题讨论】:

    标签: java class import enums package


    【解决方案1】:

    你使用了内部枚举,所以你必须通过它所在的类来引用它:

    AirCraft secondAir = new AirCraft(50.9, 10, AirCraft.AirType.HELICOPTER, AirCraft.TimeType.MONTHLY);
    

    您还可以静态导入整个枚举并按照您最初想要的方式使用它:

    import static other.AirCraft.*;
    

    然后:

    AirCraft secondAir = new AirCraft(50.9, 10, AirType.HELICOPTER, AirCraft.TimeType.MONTHLY);
    

    【讨论】:

    • 最好将枚举分成不同的类文件,然后在我的驱动程序文件中简单地导入包含两个枚举的整个包,还是像AirCraft.AirType.HELICOPTER一样直接使用更好?
    • @HelloWorld 您可以以任何对您有意义的方式进行操作。如果您的枚举旨在单独用于其他代码,请将枚举放在其自己的类中。如果枚举真的只有在特定类的上下文中使用时才有意义,那么嵌套枚举。例如,颜色。列出所有标准 colors named in CSS 的枚举应该在它自己的类中,因为许多类型的代码都可能使用它。列出飞机颜色编码部分中使用的颜色的枚举应该嵌套在 AirCraft 类中,这是它唯一有意义的上下文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 2011-09-03
    • 2019-11-02
    • 2020-07-27
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    相关资源
    最近更新 更多