设置豆
/** * Copyright 2008-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and limitations under the License. */ //package com.nowjava; import java.beans.IntrospectionException; /* from nowjava.com - 时代Java */ import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Main { public static void setBean(Object obj, String beanPath, Object value)//from 时 代 J a v a 公 众 号 throws IllegalStateException { try { if (beanPath.indexOf('.') > -1) { String name = beanPath.substring(0, beanPath.indexOf('.')); String path = beanPath.substring(beanPath.indexOf('.') + 1); Field field = findField(obj, name); field.setAccessible(true); Object child = field.get(obj); if (child == null) { throw new IllegalStateException( "Choked on a null field '" + name + "' on " + obj.getClass().getName()); } setBean(child, path, value); } else { setField(obj, beanPath, value); } } catch (IllegalAccessException e) { throw new RuntimeException(e); } } public static Field findField(Object obj, String beanPath) { try { if (beanPath.indexOf('.') > -1) { String name = beanPath.substring(0, beanPath.indexOf('.')); String path = beanPath.substring(beanPath.indexOf('.') + 1); Field field = obj.getClass().getDeclaredField(name); field.setAccessible(true); return findField(field.get(obj), path); } else if (obj == null) { return null; } else { return obj.getClass().getDeclaredField(beanPath); } } catch (NoSuchFieldException e) { return null; } catch (IllegalAccessException e) { throw new RuntimeException(e); } } public static void setField(Object parent, String fieldName, Object value) { try { Method method = findSetter(parent, fieldName); if (method != null) { method.setAccessible(true); method.invoke(parent, new Object[] { value }); } else { Field field = parent.getClass().getDeclaredField(fieldName); field.setAccessible(true); field.set(parent, value); } } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); }