黑马程序员技术交流社区

标题: Enum枚举构造函数修饰符的问题 [打印本页]

作者: 赖波    时间: 2013-10-15 17:25
标题: Enum枚举构造函数修饰符的问题
本帖最后由 赖波 于 2013-10-18 20:59 编辑

先看代码
  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Modifier;

  3. public class Test{
  4.         public enum TestEnum {
  5.                 RED(),GREED;
  6.                 TestEnum(){};
  7.         }
  8.         public static void  main(String[] args){
  9.                 TestEnum red=TestEnum.RED;
  10.                 try {
  11.                         Constructor eConstructor=red.getClass().getConstructor();
  12.                         int mod=eConstructor.getModifiers();//获取修饰符相对的int
  13.                         /*通过以下来判断是public,还是private,还是默认
  14.                          * */
  15.                         System.out.println(Modifier.isPrivate(mod));//根据mod判断哪个修饰符
  16.                         System.out.println(Modifier.isPublic(mod));
  17.                 } catch (SecurityException e) {
  18.                         // TODO Auto-generated catch block
  19.                         e.printStackTrace();
  20.                 } catch (NoSuchMethodException e) {
  21.                         // TODO Auto-generated catch block
  22.                         e.printStackTrace();
  23.                 }
  24.         }
  25. }
复制代码
因为在构在函数前没有加修饰符,不影响枚举,当然我们都知是Private
但我想通过反射来,判断是哪个修饰符
先通过枚举的一个对象red(这是一个明显的调用了写的无参构造方法的实例)
通过red的类的字节码来获取构造函数,但出错了。
我不明白是不是枚举匿名类的关系造成的吗?
作者: 张文豪    时间: 2013-10-15 23:29
API中是这么说的:
Enum
protected Enum(String name,
               int ordinal)
单独的构造方法。程序员无法调用此构造方法。该构造方法用于由响应枚举类型声明的编译器发出的代码。
作者: 李江    时间: 2013-10-18 19:46

楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2