A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ↙五线谱╲ 中级黑马   /  2013-11-1 10:47  /  741 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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的类的字节码来获取构造函数,但出错了。
我不明白是不是枚举匿名类的关系造成的吗?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

1 个回复

倒序浏览
  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值获得公有的。
希望对你有帮助!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马