黑马程序员技术交流社区

标题: 枚举问题? [打印本页]

作者: ↙五线谱╲    时间: 2013-11-1 10:47
标题: 枚举问题?
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

public class Test{
        public enum TestEnum {
                RED(),GREED;
                TestEnum(){};
        }
        public static void  main(String[] args){
                TestEnum red=TestEnum.RED;
                try {
                        Constructor eConstructor=red.getClass().getConstructor();
                        int mod=eConstructor.getModifiers();//获取修饰符相对的int
                        /*通过以下来判断是public,还是private,还是默认
                         * */
                        System.out.println(Modifier.isPrivate(mod));//根据mod判断哪个修饰符
                        System.out.println(Modifier.isPublic(mod));
                } catch (SecurityException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (NoSuchMethodException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
}

因为在构在函数前没有加修饰符,不影响枚举,当然我们都知是Private
但我想通过反射来,判断是哪个修饰符
先通过枚举的一个对象red(这是一个明显的调用了写的无参构造方法的实例)
通过red的类的字节码来获取构造函数,但出错了。
我不明白是不是枚举匿名类的关系造成的吗?
作者: 杨增坤    时间: 2013-11-1 12:30
  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Modifier;

  3. public class Test{
  4.         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().getDeclaredConstructors();
  12.                     int mod=eConstructor[0].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 (Exception e) {
  21.                     // TODO Auto-generated catch block
  22.                     e.printStackTrace();
  23.             }
  24.     }
  25. }
复制代码
使用这个方法:getDeclaredConstructors,因为这是获得所有声明的,包含私有和非私有,但是getConstructors值获得公有的。
希望对你有帮助!





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