diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/DynaBean.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/DynaBean.java index 0d3e866b7..ac45105bc 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/DynaBean.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/DynaBean.java @@ -65,13 +65,21 @@ public class DynaBean implements Cloneable, Serializable { * * @param bean 原始Bean */ - public DynaBean(Object bean) { + public DynaBean(final Object bean) { Assert.notNull(bean); if (bean instanceof DynaBean) { - bean = ((DynaBean) bean).getBean(); + // 已经是动态Bean,则提取对象 + this.bean = ((DynaBean) bean).getBean(); + this.beanClass = ((DynaBean) bean).getBeanClass(); + } else if (bean instanceof Class) { + // 用户传入类,默认按照此类的默认实例对待 + this.bean = ConstructorUtil.newInstance((Class) bean); + this.beanClass = (Class) bean; + } else { + // 普通Bean + this.bean = bean; + this.beanClass = ClassUtil.getClass(bean); } - this.bean = bean; - this.beanClass = ClassUtil.getClass(bean); } /** @@ -151,7 +159,7 @@ public class DynaBean implements Cloneable, Serializable { } else { final PropDesc prop = BeanUtil.getBeanDesc(beanClass).getProp(fieldName); if (null == prop) { - throw new BeanException("No public field or set method for {}", fieldName); + throw new BeanException("No public field or set method for '{}'", fieldName); } prop.setValue(bean, value); } diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/bean/DynaBeanTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/bean/DynaBeanTest.java index cf69f1757..2b8f29a16 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/bean/DynaBeanTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/bean/DynaBeanTest.java @@ -70,7 +70,6 @@ public class DynaBeanTest { Assertions.assertEquals("test for 李华", invoke); } - @Test public void beanByInstanceClazzConstructorTest() { final String name_before = "李华";