zoukankan      html  css  js  c++  java
  • 反射

     1、用反射的加载的类去创建实例,并实现将创建的实例去调用此类中的方法。

    String name="Com.huyanlan.javaTest.Person";
            @SuppressWarnings("rawtypes")
            Class clazz=Class.forName(name);
            Object obj=clazz.newInstance();//这是一个创建实例的方法,就是用类加载的方法进行。
            ((Person) obj).setName("Tom");

    2、简单的一些关于反射的调用类的方法,以及怎么去执行私有方法。

    public void Studenttest() throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException{
            Class clazz=Class.forName("Com.huyanlan.javaTest.Student");
            Method method_1=clazz.getDeclaredMethod("method1", int.class);//""里面的名字是对象里的方法,后面则是类型的封装类。
            
            Object obj=clazz.newInstance();//创建实例
            method_1.setAccessible(true);//允许通过以下的语句去执行
            method_1.invoke((Student)obj, 3);//已经执行了这个方法。
        //    System.out.println(((Student) obj).getN());
        //    System.out.println(method_1);
        }

    3、怎么利用反射加载私有属性变量,并做相应的处理。

    public void StudentTest1() throws ClassNotFoundException, NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException{
            Class clazz=Class.forName("Com.huyanlan.javaTest.Student");
        //    System.out.println(clazz);
            Person person;
        //    System.out.println();
            Field field=clazz.getDeclaredField("Name");
            Object obj=clazz.newInstance();
        //    System.out.println(obj);
            field.setAccessible(true);
            field.set(obj, "胡焰兰");
        //    System.out.println(((Student) obj).getName());        
        }

    4、利用反射,加载注释。

    public void AnnotationTest() throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException{
            Class clazz=Class.forName("Com.huyanlan.javaTest.Student");
            Method method=clazz.getDeclaredMethod("setGrade", int.class);
            System.out.println(method);
            Annotation annotation= method.getAnnotation(GradeValue.class);
            
            System.out.println(annotation);
            int val=30;
            if(annotation!=null){
                if(annotation instanceof GradeValue){
                    GradeValue gradeValue=(GradeValue) annotation;
                    if(val>gradeValue.max()||val<gradeValue.min()){
                        System.out.println("赋值不合法");
                    }
                }
            }
        }

    5、利用反射获得类的泛型类型。

    public static Class getReflectGeneric(Class clazz,int index){
            Type type=clazz.getGenericSuperclass();
            if(!(type instanceof ParameterizedType)){
                return Object.class;
            }
            Type[] args=((ParameterizedType)type).getActualTypeArguments();
            if(args[index]==null &&args.length<0){
                return Object.class;
            }
            
            //System.out.println(type);
            return (Class) args[index];
        }
  • 相关阅读:
    虚函数和纯虚函数
    MS CRM 2011中PartyList类型字段的实例化
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(4)
    MS CRM 2011的自定义与开发(12)——表单脚本扩展开发(2)
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)
    MS CRM 2011 SDK 5.08已经发布
    MS CRM 2011 Q2的一些更新
    最近很忙
    Microsoft Dynamics CRM 2011最近的一些更新
    补一篇,Update Rollup 12 终于发布了
  • 原文地址:https://www.cnblogs.com/baiyangLI/p/6421965.html
Copyright © 2011-2022 走看看