黑马程序员技术交流社区

标题: 昨天学习了反射 所以想练习下 结果??? [打印本页]

作者: 黄晓鑫    时间: 2014-1-18 14:42
标题: 昨天学习了反射 所以想练习下 结果???
{:soso_e143:}学习了反射 可是我想反射的类的枚举类 表示反射对枚举不能进行反射 ??如果有些朋友知道怎么反射的可以回贴 求下具体分析

作者: 几番意难相付    时间: 2014-1-18 15:37
没想过这个问题,看到你的提问实践了一下,结果是枚举可以使用反射的。
两段源码,一段枚举,一段反射调试,你看看。
  1. public enum color {
  2.         Black,White,Red;
  3.         public String getString(){
  4.                 return Black.toString();
  5.         }
  6. }
复制代码




  1. import java.lang.reflect.Field;
  2. import java.lang.reflect.Method;

  3. public class test {
  4.         public static void main(String[] args){
  5.                 Field[] fls=color.class.getDeclaredFields();
  6.                 color.Black.getString();
  7.                 for(Field fl:fls){
  8.                         System.out.println(fl);
  9.                 }
  10.                 Method[] mes=color.Black.getClass().getDeclaredMethods();
  11.                 for(Method me:mes){
  12.                         System.out.println(me);
  13.                 }
  14.         }
  15. }
复制代码

作者: 黄晓鑫    时间: 2014-1-18 15:52
哥们你这叫反射吗?
作者: 黄晓鑫    时间: 2014-1-18 15:56
反射的前提是不知道里面的类型的 你这个是知道类型的 你得先获取到里面的元素 问题是无法获取
作者: 黄晓鑫    时间: 2014-1-18 15:59
{:soso_e141:}哥们你反射那课要好好加强一下了
作者: 黄晓鑫    时间: 2014-1-18 16:01
几番意难相付 发表于 2014-1-18 15:37
没想过这个问题,看到你的提问实践了一下,结果是枚举可以使用反射的。
两段源码,一段枚举,一段反射调试 ...

:lol黑马程序员 哥们在吗
作者: 布鲁Go    时间: 2014-1-18 17:53
看到你的技术分,我直接就吓尿了。。。。。现在不是用自己的电脑,jdK都没有,看了你的问题很想去试试。。。不知道你说的是那里不行?难道是getClass 就get不出来了,那这样@Interface注解类这样的特殊类是不是也有问题?
作者: 几番意难相付    时间: 2014-1-18 18:33
黄晓鑫 发表于 2014-1-18 15:59
哥们你反射那课要好好加强一下了

如果这都不是反射,我还真不知道反射是什么了。大神版主,给解释解释?

作者: doitforyou    时间: 2014-1-18 18:43
黄晓鑫 发表于 2014-1-18 15:52
哥们你这叫反射吗?

这个绝对是反射,反射的基石是Class类,有三种办法可以获取,你所说的
不知道类型,只知道对象是通过getClass来获取,现在这个是通过类名.Class来获取。
如果这不是反射,又是什么呢?

作者: §傻、才乖    时间: 2014-1-18 19:35


你们技术分都怎么整的

作者: 黄晓鑫    时间: 2014-1-18 21:49
反射可能知道里面的元素?
作者: 几番意难相付    时间: 2014-1-19 09:30
再仔细看看视频,反射是通过类的字节码来获取类中的各个元素。并不是说,需要知道类中的元素才能进行反射,而是通过反射可以获取到类中的元素。
getField获取类中的变量常量方法名。
getmethod获取类中的方法,通过这个方法得到的method对象的invoke方法可以直接使用类中的方法。
getconstructor获取类中的构造方法,通过该方法获取到的constructor对象可以直接创建被反射的类的对象。
反射的前提是class字节码。而不是类中的元素。
这是我所理解的反射,你来说说你理解的反射是什么样的。
作者: 黄晓鑫    时间: 2014-1-19 10:26
几番意难相付 发表于 2014-1-19 09:30
再仔细看看视频,反射是通过类的字节码来获取类中的各个元素。并不是说,需要知道类中的元素才能进行反射, ...

大哥你看下可以不 看清楚 你看下反射可以获取枚举类的元素吗
作者: 几番意难相付    时间: 2014-1-19 10:42
本帖最后由 几番意难相付 于 2014-1-19 11:06 编辑

不想说什么了你觉得不可以就不可以吧
从新看了下你的问题,“类的枚举类”看来你对枚举理解错了。
枚举并不是“类的枚举类”而是枚举就是一个类,只是有点特殊而已。
它也是一个class。你想通过enum.getClass?还是想enum.class?
这样做的结果 跟class.getClass class.class 一样。
也许这就是你问题的关键所在。





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