Java 如何访问内部类?

Java 如何访问内部类?,java,Java,对于一个学校项目,我们在其中一个类中提供了如下代码 public class Outer{ private enum Inner{ NORTH, SOUTH, EAST, WEST; } } 我们还没有被教会如何使用它,因为它是自我学习的延伸。 所以我想知道如何得到,比如“NORTH”作为一个内部对象,然后我可以声明为 Inner i = ? 非常感谢,希望这是有意义的。由于您的枚举标记为私有,您只能从类外部访问它。您只需使用以下方法: Inner

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

public class Outer{
   private enum Inner{
    NORTH,
    SOUTH,
    EAST,
    WEST;
   }
}
我们还没有被教会如何使用它,因为它是自我学习的延伸。 所以我想知道如何得到,比如“NORTH”作为一个内部对象,然后我可以声明为

Inner i = ?

非常感谢,希望这是有意义的。

由于您的枚举标记为
私有
,您只能从类
外部
访问它。您只需使用以下方法:

Inner i = Inner.EAST;
但我认为你的问题是如何从类外访问此枚举。 您必须将其访问修饰符更改为
public
,然后您可以在其他类中使用它,例如:

Outer.Inner i = Outer.Inner.EAST;

您可以有意地将
NORTH
暴露给外部对象,但他们对
内部的
了解不多,他们只知道
枚举
可用的常规细节(实际上这相当多,包括所有其他
枚举
条目)


在一个类中,可以通过三种基本方式使用私有枚举。在某些情况下,类内部会使用私有枚举

方法1:enumName.Value。例如,内、北

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

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


完整代码如下所示:
internal i=internal.NORTH
非常感谢,如果我试图从另一个类中使用它呢?(即不是从外部)谢谢你不能-它被标记为
private
,因此只能在
Outer
中访问。不,它不是一个内部类的原因是枚举成员是隐式静态的。尽管如此,访问修饰符必须是
public
。@chrylis当时不是仍然是一个内部类,只是一个静态的内部类?@1337它是一个嵌套类。内部类是非静态嵌套类。@chrylis-Ah,这就是定义。谢谢你澄清:)
public static class Outer {

    private enum Inner {

        NORTH,
        SOUTH,
        EAST,
        WEST;
    }

    public Enum exposeInner () {
        return Inner.NORTH;
    }
}
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]);
    }      

}