反射:
反射获取类的实体:
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。 首先,反射内存卡具备以下基本特征:具有128MB的板载内存,4k的FIFOs,传输模式...
Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法等对象。这个特性使得Java代码能够具备高度的动态性,能够在未知类结构的情况下进行操作,增强了程序的灵活性。在Java中...
5. **API设计**:Reflang库的API设计可能是面向C++,封装了libclang的接口,提供了更方便的C语言反射操作。 6. **构建与使用**:Reflang库的构建可能依赖于LLVM和Clang,用户需要了解如何配置和使用这些工具来构建...
#### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言和技术中,包括但不限于Lisp、...
在Android开发中,ListView是一种常用的UI控件,用于展示大量数据列表。...同时,注意处理好反射操作的性能问题,避免过度使用反射导致性能下降。在实际开发中,还应考虑异常处理,确保程序的健壮性。
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...
整理的Java反射的常用的一些方式,采用xmind的形式整理出来。希望有能够用到的。将java代码的各个组成部分封装为其他对象,可以在程序运行过程中操作这些对象,这就是java的反射机制;
### 类的反射机制及其常用方法 #### 反射机制简介 反射是Java语言的一个重要特性,它允许在运行时检查类、接口、字段和方法的信息,并且可以动态地调用方法或修改字段值。这种能力使得Java程序具有高度的灵活性和...
根据题目提供的代码示例,我们可以了解到反射的一些基本操作: 1. **加载程序集**:使用`System.Reflection.Assembly.LoadFile`方法加载一个DLL文件。 ```csharp Assembly ass = Assembly.LoadFile(@"d:\...
### ASP.NET教程:.Net中的...通过本教程,我们不仅了解了反射的基本概念和操作,还学习了一些高级用法。掌握反射可以帮助开发者编写更加灵活和可扩展的代码,尤其是在处理那些类型不确定或者需要动态构建代码的场景。
这个压缩包“C#反射.zip”包含了一些实例代码和详解文档,对于初学者理解这一高级特性至关重要。下面将详细阐述C#反射的基本概念、用途及其相关知识点。 一、什么是C#反射 C#反射是一种动态类型处理能力,它可以在...
通常,C++不直接支持反射,但开发者可以通过一些技巧来实现类似的功能。本实例将探讨如何在C++中通过类工厂(Class Factory)动态创建对象实例,实现一种简单的反射机制。 首先,`CppReflection.cpp` 文件可能包含...
### Java反射机制的原理及在Android下的简单应用 #### 一、Java反射机制的基本概念 反射(Reflection)是指程序在运行时能够访问、检测和修改它自身的能力。这种能力使得程序能够动态地获取自身的结构信息并操作...
同时,笔记中还提到了MySQL数据库和SQLyog工具,它们是数据库管理和开发的常用工具,MySQL是开源的关系型数据库,而SQLyog则是一个图形化的管理界面,使得数据库操作更加直观便捷。 配置方法的介绍则意味着笔记中...
反射是许多现代编程语言中的一项重要特性,它允许程序在运行时检查和操作自身的内部结构。Go 语言同样具备这样的能力,它通过 `reflect` 包提供了一套完整的反射机制。本文将详细介绍如何在 Go 语言中利用反射来动态...
"Emit应用中的常用技巧"和"Reflection_Emit使用(1)"这两篇文章可能探讨了使用IL Emit技术自动生成和执行代码,这是一种底层方法,可以直接生成机器码,通常比反射更快。 "FastReflectionLib-Beta-source.zip"则可能...
1. 性能损耗:反射操作比常规的Java代码执行慢,因为它需要在运行时解析类信息。 2. 安全风险:反射可以访问私有成员,可能破坏封装性,增加代码的不稳定性。 3. 代码复杂性:过度使用反射会使代码变得难以理解和...