我如何访问内部类?

时间:2014-08-28 22:09:16

标签: java

对于学校项目,我们已经在其中一个类中提供了代码

public class Outer{
   private enum Inner{
    NORTH,
    SOUTH,
    EAST,
    WEST;
   }
}

我们还没有被教过如何使用它,因为它是自学的延伸。 所以我想知道如何得到例如" NORTH"作为一个内部对象,然后我可以声明为

Inner i = ?

非常感谢,希望这是有道理的。

3 个答案:

答案 0 :(得分:3)

由于您的枚举标记为private,因此您只能在课程outer内访问它。您只需使用以下命令即可完成此操作:

Inner i = Inner.EAST;

但我认为你的问题是关于如何从课外访问这个枚举。 您必须将其访问修饰符更改为public,然后您可以在其他类中使用它:

Outer.Inner i = Outer.Inner.EAST;

答案 1 :(得分:0)

您可以 - 故意 - 将NORTH公开给外部对象,但他们不会对Inner知之甚少,他们只会知道Enum可用的正常详细信息(这实际上是相当的)很多,包括所有其他enum条目。

public static class Outer {

    private enum Inner {

        NORTH,
        SOUTH,
        EAST,
        WEST;
    }

    public Enum exposeInner () {
        return Inner.NORTH;
    }
}

答案 2 :(得分:0)

您可以在一个类中以基本的三种方式使用私有枚举。有些情况下,在类中使用私有枚举。

方法1:enumName.Value。例如。 Inner.NORTH

方法2(特殊情况):如果您在switch语句中并且enum变量用作选择器,则可以直接使用不带枚举名称的值。例如。案例NORTH:

方法3:   您可以使用values方法获取包含枚举的所有值的数组。例如。 (对于第一个元素):Inner.values()[0]


完整代码如下:

public class Outer{
   private enum Inner{
    NORTH,
    SOUTH,
    EAST,
    WEST;
   }
   public static void main(String[] args) {
       Inner i = Inner.NORTH;
       System.out.println("i = " + i + "\n");

       System.out.print("Switch Statement: \n" +
         "i = ");
       switch(i) {
       case NORTH:
           System.out.println(Inner.NORTH);
           break;
       case SOUTH:
           System.out.println(Inner.SOUTH);
       case EAST:
           System.out.println(Inner.EAST);
       case WEST:
           System.out.println(Inner.WEST);
       default:
           System.out.println(i);
       }

       System.out.println("\nUsing values method: ");
       for (Inner value : Inner.values()) 
         System.out.println("value = " + value);
       System.out.println("value of first element in the arra = " + Inner.values()[0]);
    }      

}