`
y806839048
  • 浏览: 1119287 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

反射的常用操作及一些使用特征

阅读更多

 

 

 

反射:

 

 

反射获取类的实体:

class Factory{  

    public static fruit getInstance(String ClassName){  

        fruit f=null;  

        try{  

            f=(fruit)Class.forName(ClassName).newInstance();  

        }catch (Exception e) {  

            e.printStackTrace();  

        }  

        return f;  

    }  

}  

class hello{  

    public static void main(String[] a){  

        fruit f=Factory.getInstance("Reflect.Apple");  

        if(f!=null){  

            f.eat();  

        }  

    }  

 

 

反射调用属性的操作方法:

 

public class Person implements Serializable {

 

    private String name;

    private int age;

// get/set方法

}

public static void main(String[] args) {

    Person person = new Person("luoxn28", 23);

    Class clazz = person.getClass();

 

    Field[] fields = clazz.getDeclaredFields();

    for (Field field : fields) {

        String key = field.getName();

        PropertyDescriptor descriptor = new PropertyDescriptor(key, clazz);

        Method method = descriptor.getReadMethod();

        Object value = method.invoke(person);

 

        System.out.println(key + ":" + value);

 

    }

}

 

 

 

 

 

反射获取具体实体的某一个字段值的快速方法(包括list):

field.get(object);

 /**

     * 检查bean中含有List的必要参数

     *

     * @param object

     * @return

     * @throws Exception

     */

    public static String checkBeans(Object object) throws Exception {

        Class cls = object.getClass();

        StringBuilder stringBuilder = new StringBuilder();

        for (; cls != Object.class; cls = cls.getSuperclass()) {//从本类一直遍历到父类

            Field[] fieldes = cls.getDeclaredFields();

            for (Field field : fieldes) {

                field.setAccessible(true);

                NotEmpty annotation = field.getAnnotation(NotEmpty.class);

                IsJsonArray isJsonArray = field.getAnnotation(IsJsonArray.class);

                Valid valid = field.getAnnotation(Valid.class);

 

                if (annotation != null

                        && StringUtils.isBlank((String) field.get(object))) {

                    stringBuilder.append(field.getName());

                    stringBuilder.append(";");

                }

                if (isJsonArray != null

                        && !JsonUtils.isJsonArrayString((String) field.get(object))) {

                    stringBuilder.append(field.getName());

                    stringBuilder.append(";");

                }

                if (valid != null

                        && !ArrayIsNotNull.isNull( (List<Object>)field.get(object))) {

                    List<Object> os=(List<Object>) field.get(object);

                   for(Object o :  os){

                       checkBean(stringBuilder,o);

                   }

                }else if(valid != null && ArrayIsNotNull.isNull( (List<Object>)field.get(object))){

                    stringBuilder.append(field.getName());

                    stringBuilder.append(";");

                }

            }

        }

        return stringBuilder.toString();

    }

 

 

 

反射的一些使用特征,1,基于目标对象,方法对象操作  2,和常规的对象.方法相反(方法对象.对象)

 

method.invoke(TYZDSxPTAPI.instance();

 

 

public ApiResponse apiSend(FacadeSendRequest facadeSendRequest) throws Exception{

String methodName = urlEnum.getUrl();

//将packet中的json字符串转成接口参数map

log.info("解析api方法名为:[{}]",methodName);

String jsonStr = facadeSendRequest.getPacket();

Map<String,Object> paramMap = (Map<String,Object>)JSON.parse(jsonStr);

Method method = TYZDSxPTAPI.class.getMethod(methodName, Map.class);

if(method == null){

log.error("类TYZDSxPTAPI中未找到对应方法函数:[{}]",methodName);

}

String logStr = JSONObject.toJSONString(paramMap);

log.info("开始调用TYZDSxPTAPI.{}:参数:{}",methodName,logStr.length() > 10000 ? (logStr.substring(0, 10000) + "...") : logStr);

Map<String,Object> returnMap;

if ("TYZDAdvceListQry".equals(methodName)) {//临时注释

Map<String, Object> rspMap = TYZDSxPTAPI.instance().sendRequest("", "ZDSupLstQry", paramMap);

returnMap = DataUtil.dealResult(rspMap);

} else {

returnMap = (Map<String,Object>)method.invoke(TYZDSxPTAPI.instance(), paramMap);

}

log.info("结束调用TYZDSxPTAPI.{}:返回:{}",methodName,JSONObject.toJSONString(returnMap));

return afterSend(facadeSendRequest.getTradeCode(),JSONObject.toJSONString(returnMap));

}

 

 

 

 

分享到:
评论

相关推荐

    反射内存卡收发示例及常用API说明

    本知识点围绕标题“反射内存卡收发示例及常用API说明”展开,将详细介绍反射内存卡的工作原理、特点、发送和接收流程以及常用API。 首先,反射内存卡具备以下基本特征:具有128MB的板载内存,4k的FIFOs,传输模式...

    Java反射常用机制

    Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。这个特性使得Java代码能够具备高度的动态性,能够在未知类结构的情况下进行操作,增强了程序的灵活性。在Java中...

    cpp-Reflang使用libclang实现的C反射库

    5. **API设计**:Reflang库的API设计可能是面向C++,封装了libclang的接口,提供了更方便的C语言反射操作。 6. **构建与使用**:Reflang库的构建可能依赖于LLVM和Clang,用户需要了解如何配置和使用这些工具来构建...

    反射实例-JAVA反射机制

    #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言和技术中,包括但不限于Lisp、...

    使用反射实现绑定的 ListView

    在Android开发中,ListView是一种常用的UI控件,用于展示大量数据列表。...同时,注意处理好反射操作的性能问题,避免过度使用反射导致性能下降。在实际开发中,还应考虑异常处理,确保程序的健壮性。

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    反射常用方法整理(xmind)

    整理的Java反射的常用的一些方式,采用xmind的形式整理出来。希望有能够用到的。将java代码的各个组成部分封装为其他对象,可以在程序运行过程中操作这些对象,这就是java的反射机制;

    类的反射机制 常用的方法(简单明确)

    ### 类的反射机制及其常用方法 #### 反射机制简介 反射是Java语言的一个重要特性,它允许在运行时检查类、接口、字段和方法的信息,并且可以动态地调用方法或修改字段值。这种能力使得Java程序具有高度的灵活性和...

    .net 反射的用法

    根据题目提供的代码示例,我们可以了解到反射的一些基本操作: 1. **加载程序集**:使用`System.Reflection.Assembly.LoadFile`方法加载一个DLL文件。 ```csharp Assembly ass = Assembly.LoadFile(@"d:\...

    asp.net教程-.Net中的反射使用入门

    ### ASP.NET教程:.Net中的...通过本教程,我们不仅了解了反射的基本概念和操作,还学习了一些高级用法。掌握反射可以帮助开发者编写更加灵活和可扩展的代码,尤其是在处理那些类型不确定或者需要动态构建代码的场景。

    C#反射.zip

    这个压缩包“C#反射.zip”包含了一些实例代码和详解文档,对于初学者理解这一高级特性至关重要。下面将详细阐述C#反射的基本概念、用途及其相关知识点。 一、什么是C#反射 C#反射是一种动态类型处理能力,它可以在...

    Cpp反射实例动态使用类厂得到实例类

    通常,C++不直接支持反射,但开发者可以通过一些技巧来实现类似的功能。本实例将探讨如何在C++中通过类工厂(Class Factory)动态创建对象实例,实现一种简单的反射机制。 首先,`CppReflection.cpp` 文件可能包含...

    java反射机制的原理及在Android下的简单应用

    ### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...

    java基础部分的笔记,包含抽象,特征,映射,流,线程,反射等

    同时,笔记中还提到了MySQL数据库和SQLyog工具,它们是数据库管理和开发的常用工具,MySQL是开源的关系型数据库,而SQLyog则是一个图形化的管理界面,使得数据库操作更加直观便捷。 配置方法的介绍则意味着笔记中...

    详解Golang利用反射reflect动态调用方法

    反射是许多现代编程语言中的一项重要特性,它允许程序在运行时检查和操作自身的内部结构。Go 语言同样具备这样的能力,它通过 `reflect` 包提供了一套完整的反射机制。本文将详细介绍如何在 Go 语言中利用反射来动态...

    提升反射的性能(有用,启发)

    "Emit应用中的常用技巧"和"Reflection_Emit使用(1)"这两篇文章可能探讨了使用IL Emit技术自动生成和执行代码,这是一种底层方法,可以直接生成机器码,通常比反射更快。 "FastReflectionLib-Beta-source.zip"则可能...

    java反射源代码

    1. 性能损耗:反射操作比常规的Java代码执行慢,因为它需要在运行时解析类信息。 2. 安全风险:反射可以访问私有成员,可能破坏封装性,增加代码的不稳定性。 3. 代码复杂性:过度使用反射会使代码变得难以理解和...

Global site tag (gtag.js) - Google Analytics