import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Reflection {
/**
* 得到某个对象的公共属性
*
* @param owner, fieldName
* @return 该属性对象
* @throws Exception
*
*/
public Object getProperty(Object owner, String fieldName) throws Exception {
Class ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
}
/**
* 得到某类的静态公共属性
*
* @param className 类名
* @param fieldName 属性名
* @return 该属性对象
* @throws Exception
*/
public Object getStaticProperty(String className, String fieldName)
throws Exception {
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
}
/**
* 执行某对象方法
*
* @param owner
* 对象
* @param methodName
* 方法名
* @param args
* 参数
* @return 方法返回值
* @throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object[] args)
throws Exception {
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
/**
* 执行某类的静态方法
*
* @param className
* 类名
* @param methodName
* 方法名
* @param args
* 参数数组
* @return 执行方法返回的结果
* @throws Exception
*/
public Object invokeStaticMethod(String className, String methodName,
Object[] args) throws Exception {
Class ownerClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
}
/**
* 新建实例
* @param className 类名
* @param args 构造函数的参数
* 如果无构造参数,args 填写为 null
* @return 新建的实例
* @throws Exception
*/
public Object newInstance(String className, Object[] args) throws Exception {
Class newoneClass = Class.forName(className);
if(args == null){
return newoneClass.newInstance();
}else{
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
}
/**
* 是不是某个类的实例
* @param obj 实例
* @param cls 类
* @return 如果 obj 是此类的实例,则返回 true
*/
public boolean isInstance(Object obj, Class cls) {
return cls.isInstance(obj);
}
/**
* 得到数组中的某个元素
* @param array 数组
* @param index 索引
* @return 返回指定数组对象中索引组件的值
*/
public Object getByArray(Object array, int index) {
return Array.get(array,index);
}
}
分享到:
相关推荐
Java工具类是Java编程中非常重要的组成部分,它们提供了一系列便捷的方法,可以极大地提高开发效率,减少重复代码。这里我们主要探讨的是一个集合了多种常见功能的Java工具类库。 首先,我们要理解Java工具类(Java...
"java常用工具类整理"这个主题涵盖了Java开发中常用的工具类,这些类在日常编程中非常实用,能大大提高开发效率。这里我们将深入探讨一些常见的Java工具类,并结合`com-jarvis-base`这个文件名,推测这是一个基础...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理对象、类、接口以及它们之间的关系...
在这个Java整理的基础工具类项目中,我们可以看到作者`chenyongci`为了方便开发,集成了各种实用的工具类。这个项目可能包括了字符串处理、日期时间操作、集合操作、IO流处理等多个方面的内容。 1. **字符串处理**...
"工作5年精心整理_Java常用工具类源码"这个资源集合了作者五年工作经验中的精华,提供了大量实用的工具操作类,覆盖了Java开发中的常见需求。以下是一些关键的知识点: 1. **IO操作**:Java的`java.io`包包含了一...
ReflectUtils 反射工具类,提供一些Java基本的反射功能 RegexUtils 正则表达式工具类,提供一些常用的正则表达式 SDCardUtils SD卡工具箱 Symbols 常用符号 WebViewManager WebView管理器,提供常用设置 原地址:...
Java反射技术是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个技术主要基于Java.lang.reflect包中的类和接口,如Class、Constructor、Method和Field等。...
这里提到的"这些年整理的一些常用Utils工具类"是一份集合了多种功能的Java工具库,旨在为开发人员提供便利。以下将详细介绍其中可能包含的知识点: 1. **Utils工具类的设计理念**: - 工具类通常设计为静态方法...
4. **多线程**:线程的创建(Thread类与Runnable接口)、同步机制(synchronized关键字、wait/notify、Lock接口)、并发工具类(如Semaphore、CountDownLatch)和线程池。 5. **JVM**:Java虚拟机的工作原理,包括...
7. **反射机制**:Java反射是动态获取类信息并操作对象的关键技术,包括Class类的使用、创建对象、访问私有成员、方法的动态调用等。 8. **设计模式**:单例模式、工厂模式、装饰器模式、代理模式、观察者模式等...
7. **反射与注解**:反射机制使得在运行时可以动态地获取类的信息并操作类的对象,而注解提供了元数据的功能,增强了代码的可读性和自解释性。 8. **设计模式**:了解并能应用常见的设计模式,如单例、工厂、观察者...
11. **反射**:Java反射机制允许在运行时检查类的信息,如类名、方法名、参数类型等,并能动态创建对象和调用方法。 12. **泛型**:泛型提供了一种在编译时检查类型安全性的方法,同时允许在代码中重复使用相同的...
- **反射(Reflection)**:在某些情况下,Java汉化可能涉及到动态加载和修改类的本地化属性,这需要用到Java的反射机制。 4. **注意事项**: - 汉化时需确保不改变原文本的含义,同时注意保持代码的可读性和一致...
15. **并发工具类**:如CountDownLatch、CyclicBarrier、Semaphore等,这些工具类可以帮助我们更好地管理和控制并发程序。 以上就是“Java常用代码整理”可能涵盖的知识点,这些内容对于深入理解和运用Java编程语言...
对于并发和多线程,Java提供了丰富的API和工具,如线程池、同步机制(如synchronized关键字和Lock接口)、并发集合类等。这部分内容将帮助你理解和解决多线程环境中的问题,提升程序的执行效率。 在内存管理和性能...
7. **反射**:反射机制允许我们在运行时检查和操作类、接口、字段和方法,这对于动态加载类、创建对象以及访问私有成员很有用。 8. **泛型**:泛型提供了一种方式来限制集合中存储的数据类型,增强了代码的安全性和...
8. **反射机制**:Java反射机制允许在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和访问私有属性。这对于创建灵活和动态的应用程序非常有用。 9. **JVM内存模型**:理解Java虚拟机(JVM)的工作...
【Java程序员高手文章集+(PDF)源码整理】这一资源主要针对的是Java编程语言的学习与实践,特别是对于希望成为Java编程高手的程序员。这个压缩包包含了一整套精选的Java技术文章,以及相关的源码整理,是提升Java技能...
- **并发工具类**:如CountDownLatch、CyclicBarrier、Semaphore等。 7. **反射** - **Class对象**:获取类的信息,动态创建对象和调用方法。 - **方法反射**:运行时动态调用方法,处理方法的参数和返回值。 -...
Java知识点整理 Java是一种广泛使用的面向对象的编程语言,它具有丰富的API(应用程序接口)和强大的功能。在Java考试中,掌握以下知识点至关重要: 1. **JAVA SE**(Java标准版)是Java的核心部分,包括基础语法...