在<Java解惑>上面看到第八十三例--诵读困难者,要求使用非反射实现单例对象的拷贝.查阅了部分资料,先实现通过反射拷贝对象. 1. 编写需要被拷贝的对象Person package com.scl.j2se.reflectjavabean; public class Person { public String getName() { return name; } public void setName(String name) { this.name = name; } public St…
Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但不能提高性能,反而会使性能下降,所以使用场合需要自己把握 下面是在我的电脑上做的一些测试(因机器配置不同会有少许误差) 测试次数 Literacy 反射 10 16ms 0ms 100 15ms 0ms 1K 16ms 5ms 1W 16ms 50ms 10W 23ms 505ms 100W 87m…
java反射无所不能,辣么,怎么通过反射设置一个属性的值呢? 主程序: /** * @author tengqingya * @create 2017-03-05 15:54 */ public class TestReflectSet { private String readOnly; public String getReadOnly() { return readOnly; } public void setReadOnly( String readOnly ) { System.out…
深拷贝和浅拷贝 首先对象的复制分为深拷贝和浅拷贝,关于这两者的区别,简单来说就是对于对象的引用,在拷贝的时候,是否会新开辟一块内存,还是直接复制引用. 两者的比较也有很多,具体可以看这篇文章: http://blog.csdn.net/zhangjg_blog/article/details/18369201 常用方法 这些只是目前我知道了,当然可能还有更多 org.apache.commons.lang3.SerializationUtils#clone 这个是通过序列化的方式,将两个相同类型…
Field[] field = behavior.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { String name = field[i].getName(); name = name.substring(0, 1).toUpperCase() + name.substring(1);//找到首位改成大写形式 String type = field[i].getGenericType().toS…
代码: // 通过属性获取传入对象的指定属性的值 public String getValueByPropName(Student student, String propName) { String value = null; try { // 通过属性获取对象的属性 Field field = student.getClass().getDeclaredField(propName); // 对象的属性的访问权限设置为可访问 field.setAccessible(true); // 获取属…
今天项目中遇到了一个问题,要调用一个类,并获取这个类的属性进行赋值然后将这个类传递到方法中做为参数. 实际操作时才发现,这个类中的字段属性是私有的,不能进行赋值!没有提供公有的方法.而这个类又是打包成jar给我的,我还不能更改它的代码,以至于想手动给它写个set方法都是问题.后来想到用反射可以解决这个问题,于是试了一下,果然! 反射看来根本不区分是否是private的,调用本身的私有方法是可以的,但是调用父类的私有方法则不行,纠其原因很有可能是因为getDeclaredMethod方法和getM…
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class BeanChangeUtil<T> { public static <T> void main(String[] args) { User u1 = new User("1", true, "a"); User u…
public class test { public static void main(String[] args) { List<Bill> list = new test().setObject(); Set<String> set = new HashSet(); for (Bill bills : list) { set.add(bills.getTradeTime().substring(0, 8)); } List list1 = new ArrayList(); in…
C#获得对象的所有属性和值 public void GetPros() { UserInfo userInfo = new UserInfo(); userInfo.ID = ; userInfo.Name = "jay"; foreach (System.Reflection.PropertyInfo p in userInfo.GetType().GetProperties()) { Console.WriteLine("Name:{0} Value:{1}",…