繁体   English   中英

我如何进入内部课程?

[英]How can I access an inner class?

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

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

我们还没有教过如何使用它,因为它是自学的扩展。 所以我想知道如何获取“ NORTH”作为内部对象,然后可以将其声明为

Inner i = ?

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

因为您的枚举被标记为private您只能从outer类访问它。 您只需使用以下方法即可:

Inner i = Inner.EAST;

但是我认为您的问题是关于如何从课堂之外访问此枚举。 您必须将其访问修饰符更改为public ,然后才能在其他类中使用它,如下所示:

Outer.Inner i = Outer.Inner.EAST;

您可以-故意-将NORTH暴露给外部对象,但他们对Inner了解不多,他们只知道Enum可用的常规细节(实际上很多,并且包括所有其他enum项)。

public static class Outer {

    private enum Inner {

        NORTH,
        SOUTH,
        EAST,
        WEST;
    }

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

您可以在类内以三种基本方式使用私有枚举。 在某些情况下,在类内使用私有枚举。

方法1:enumName.Value。 内在北方

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

方法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]);
    }      

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM