文档章节

java反射

天呀鲁哇
 天呀鲁哇
发布于 2015/02/11 17:54
字数 661
阅读 219
收藏 13
点赞 0
评论 0

看了别人的那么多文章,总归不是办法;还是自己整理,按照自己的理解来!

1,Class类

    说明:此类的实例是标示正在运行的java类或者接口;Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。我们可以根据不同对象的.getClass()获得;

        例:Class backupEntityClass  = backupEntity.getClass();      

    方法说明:

       

注:我主要使用的分为5类

        1,获取class   forName

        2,实例化对象   newInstance();

        3,获得属性值(不包括继承的----一定要注意

        4,获得方法(不包括继承的)

        5,获得注解


2,Method

    说明:Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。

    方法说明:  

注:我常用的:获取方法名    执行方法并获得返回值


3,Field

Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。

    我主要用的方法是:get/set  获取或设置属性值

                              getAnnotation 获得注解


4,PropertyDescriptor

PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。


5,运用实例(Copy对象)

package com.yhy.app.basic;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class EntityCopyUtil {
	
	public <T>T backup(Object entity,Class<T> clazz) throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException{
		
		Class entityClass = entity.getClass();
		Field[] entityFields =entityClass.getDeclaredFields();
		
		T backupEntity = clazz.newInstance();
		Class backupEntityClass  = backupEntity.getClass();
		Field[] backupEntityFields =backupEntity.getClass().getDeclaredFields();
		
		
		for(Field ef:entityFields){
			for(Field bef:backupEntityFields){
				if(ef.getName().equals(bef.getName())){
					 PropertyDescriptor epd = new PropertyDescriptor(ef.getName(),entityClass);
					 Method getMethod = epd.getReadMethod();//获得get方法
					 
					 PropertyDescriptor bepd = new PropertyDescriptor(bef.getName(),backupEntityClass);
					 Method setMethod = bepd.getWriteMethod();//获得set方法
					 setMethod.invoke(backupEntity, getMethod.invoke(entity));
				}
			}
		}
		
		return (T) backupEntity;
	}
}

                              

注:上面例子有一个漏洞;我们无法复制父类的属性;那么我们使用的时候怎么解决呢?通过getsuperClass再重新做一次getfiles来实现;


图片都是从API上截取的,一直热衷于API文档  从未被超越!嘿嘿


6,AccessibleObject

    

    

AccessibleObject 类是 Field、Method 和 Constructor 对象的基类。它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。对于公共成员、默认(打包)访问成员、受保护成员和私有成员,在分别使用 Field、Method 或 Constructor 对象来设置或获取字段、调用方法,或者创建和初始化类的新实例的时候,会执行访问检查。 

© 著作权归作者所有

共有 人打赏支持
天呀鲁哇
粉丝 8
博文 98
码字总数 42007
作品 0
长宁
程序员
Android 4.4(KK)中利用APP打开关闭数据流量

在Android 4.4中,在app中打开或关闭数据流量 如果有这方面需求可以参考。 思路 利用JAVA的反射机制(Reflection),来调用CONNECTIVITY_SERVICE完成相关操作。 关于JAVA的反射机制,可以参考...

W_X
2014/12/17
0
4
Java基础之反射(非常重要)

反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道...

Java-老刘
05/15
0
0
从 java bean 的内省到 dbutils 的应用

java bean 内省的基础 java bean 的内省,其实可以算是反射的一种基础应用,关于 java 的反射,无非就是获得对应的类、属性、方法、修饰符等的应用,对于 java 的反射探讨,可以点击参考 ja...

peiquan
07/04
0
0
Java反射改变Android属性

Java反射改变Android属性 在某些情况下,Android体系里面的某些对象没有对外提供针对某个属性或者类,方法公开的get或者set方法,但是项目需要对这些需要修改和调整。就需要使用Java的反射机...

zhangphil
04/28
0
0
阿里历年经典Java面试题汇总

Volatile的特征: A、禁止指令重排(有例外) B、可见性 Volatile的内存语义: 当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存。 当读一个volatile变量时,J...

Java团长17
07/11
0
0
springmvc hibernate jvm permGen Space

最近项目突然出现了“java.lang.OutOfMemoryError: PermGen space”的错误,其实关于 PermGen space 错误的解释,网上已经有很多了,摘录一段 PermGen space的全称是Permanent Generation sp...

alexgaoyh
2015/03/12
0
1
java 过滤list的几种方式

java中 过滤list的几种方式 方式一:使用java 8语法:stream+反射 抽取为通用的过滤方法: 进一步抽取: 方式二:遍历+反射 反射类 ReflectHWUtils 见 https://github.com/liuyu520/io0007 的com...

黄威
07/02
0
0
Git撤销已经推送(push)至远端仓库的提交(commit)信息

有时,在git push之后,才发现还有一些代码需要进行很小的改动,这些改动在原则上不应该作为一次新的提交。这时,我们需要撤销这次推送(git push)与提交(git commit),然后进行代码修改,再重...

春哥大魔王的博客
07/05
0
0
一篇偏激的项目总结和PPT——数据驱动型的网站开发的几个问题和讨论。

所谓数据驱动型的网站,其实就是常见的MIS系统在B/S形式下的实现。B/S模式在90年年代末大量出现的时候,其主要特征是Page-Based,也就是基于页面的。因为Html技术的网站本身是一张一张的页面...

Brin想写程序
2014/04/18
0
2
模拟spring IOC 实现

利用java的反射和动态代理实现IOC 在Java中,其反射和动态代理机制极其强大,我们可以通过其反射机制在运行时获取信息。而代理是一种基本的设计模式,它是一种为了提供额外的或不同的操作而插...

candies
2014/03/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
今天
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部