java 怎么找到大对象,Java大对象
发表于 ・ 服务项目
对于java 怎么找到大对象的相关题,以及Java大对象想必很多人都想知道,接下来让小编给大家解说。
java 怎么找到大对象
有好多情景要运转时创建对象,比方Copy对象到指定类别的对象中,比方依据指定的字段和值建立指定类别的对像啦。运用JDK自己带有的反射(java.lang.reflect)或许自省(java.beans.Introspector)都可以可完成呢。自省的方法会对类型信息作缓存因此效果愈加高,推举领先运用了。
copy对象
2个方法实现,一是动态创建指定类别的对象,二是获得据源对象属性的值并赋到新对象相应的属性上了。
public static void doCopyNotNull(Class<?> clazz, Object source, Object target) ]&34;the value is []&34;,field.getName(),value); field.set(target, value); catch (IllegalArgumentException e) catch (IllegalAccessException e) public static List<Field> getAllFields(Class clazz) return resultFieldList;
运用自省建立动向创建对象呢。
运用情景建立指定类别的对象并依据key为字段名称value为相应值的java.util.Map初始化对象,对象实现回返给挪用方啦。
十分要重申的是指定的java类别要吻合java bean取名规矩啦。
2.1. 获得指定Class的key为filed的名称,value为PropertyDescriptor的map
/** * 回返指定key为field名称,value为PropertyDescriptor的map * * @param clazz * @return */ public static Map<String, PropertyDescriptor> getPropertyDescriptorMap(Class clazz) catch (IntrospectionException e) return map;
2.2 . 创建对象并初始化对象
/** * 建立指定类别的对象并依据传入的字段和相应的值给对象赋值啦。 * * @param fieldValueMap * @param clazz * @param <T> * @return */ public static <T> T createBean(Map<String, Object> fieldValueMap, Class<T> clazz) try PropertyDescriptor propertyDescriptor = propertyDescriptorMap.get(k); if (propertyDescriptor==null)]中没有字段[],相应的值[]将没法设定.请查看是不是有疑.",clazz,k,v); return; try propertyDescriptor.getWriteMethod().invoke(obj, v); catch (IllegalAccessException | InvocationTargetException e) catch(Throwable e) ); return obj; catch (InstantiationException | IllegalAccessException e) return null;
fieldValueMap:以property名称为key值为value的map啦。
clazz创建对象的类别呢。
推举运用自省的方法创建对象,由于自省城缓存类型信息,然而不用每一次挪用从新获得类型信息,因此可以提升在多次运用时的功能呢。
察看源码如以下
public static BeanInfo getBeanInfo(Class<?> beanClass) throws IntrospectionException ThreadGroupContext context = ThreadGroupContext.getContext(); BeanInfo beanInfo; synchronized (declaredMethodCache) if (beanInfo == null) return beanInfo;
留意 synchronized (declaredMethodCache)
一开始的时候从缓存中获得bean短信,假如不存在才会从新获得,因而建立几个类别一样的对象时可以大大提高功能 啦。
关于一些java 怎么找到大对象的这类话题,以及Java大对象的相关内容,本篇文章已做出了详细的解,希望能帮助到大家。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。