mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
可选参数,方法重载优先级问题
This commit is contained in:
parent
d2fc1e598b
commit
b612eecb33
@ -31,6 +31,17 @@ public class DynaBean extends CloneSupport<DynaBean> implements Serializable {
|
||||
return new DynaBean(bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建一个{@link DynaBean}
|
||||
*
|
||||
* @param beanClass Bean类
|
||||
* @return {@link DynaBean}
|
||||
*/
|
||||
public static DynaBean create(Class<?> beanClass) {
|
||||
return new DynaBean(beanClass);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建一个{@link DynaBean}
|
||||
*
|
||||
@ -54,6 +65,15 @@ public class DynaBean extends CloneSupport<DynaBean> implements Serializable {
|
||||
this(ReflectUtil.newInstance(beanClass, params));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param beanClass Bean类
|
||||
*/
|
||||
public DynaBean(Class<?> beanClass) {
|
||||
this(ReflectUtil.newInstance(beanClass));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
@ -83,7 +103,7 @@ public class DynaBean extends CloneSupport<DynaBean> implements Serializable {
|
||||
return (T) ((Map<?, ?>) bean).get(fieldName);
|
||||
} else {
|
||||
final PropDesc prop = BeanUtil.getBeanDesc(beanClass).getProp(fieldName);
|
||||
if(null == prop){
|
||||
if (null == prop) {
|
||||
throw new BeanException("No public field or get method for {}", fieldName);
|
||||
}
|
||||
return (T) prop.getValue(bean);
|
||||
@ -97,7 +117,7 @@ public class DynaBean extends CloneSupport<DynaBean> implements Serializable {
|
||||
* @return 是否有bean属性
|
||||
* @since 5.4.2
|
||||
*/
|
||||
public boolean containsProp(String fieldName){
|
||||
public boolean containsProp(String fieldName) {
|
||||
return null != BeanUtil.getBeanDesc(beanClass).getProp(fieldName);
|
||||
}
|
||||
|
||||
@ -130,7 +150,7 @@ public class DynaBean extends CloneSupport<DynaBean> implements Serializable {
|
||||
((Map) bean).put(fieldName, value);
|
||||
} else {
|
||||
final PropDesc prop = BeanUtil.getBeanDesc(beanClass).getProp(fieldName);
|
||||
if(null == prop){
|
||||
if (null == prop) {
|
||||
throw new BeanException("No public field or set method for {}", fieldName);
|
||||
}
|
||||
prop.setValue(bean, value);
|
||||
|
@ -34,6 +34,56 @@ public class DynaBeanTest {
|
||||
Assert.assertEquals("test for 李华", invoke);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void bean_by_static_clazz_constructor_Test() {
|
||||
String name_before = "李华";
|
||||
int age_before = 12;
|
||||
DynaBean bean = DynaBean.create(User.class);
|
||||
bean.set("name", name_before);
|
||||
bean.set("age", age_before);
|
||||
|
||||
String name_after = bean.get("name");
|
||||
Assert.assertEquals(name_before, name_after);
|
||||
int age_after = bean.get("age");
|
||||
Assert.assertEquals(age_before, age_after);
|
||||
|
||||
//重复包装测试
|
||||
DynaBean bean2 = new DynaBean(bean);
|
||||
User user2 = bean2.getBean();
|
||||
User user1 = bean.getBean();
|
||||
Assert.assertEquals(user1, user2);
|
||||
|
||||
//执行指定方法
|
||||
Object invoke = bean2.invoke("testMethod");
|
||||
Assert.assertEquals("test for 李华", invoke);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void bean_by_instance_clazz_constructor_Test() {
|
||||
String name_before = "李华";
|
||||
int age_before = 12;
|
||||
DynaBean bean = new DynaBean(User.class);
|
||||
bean.set("name", name_before);
|
||||
bean.set("age", age_before);
|
||||
|
||||
String name_after = bean.get("name");
|
||||
Assert.assertEquals(name_before, name_after);
|
||||
int age_after = bean.get("age");
|
||||
Assert.assertEquals(age_before, age_after);
|
||||
|
||||
//重复包装测试
|
||||
DynaBean bean2 = new DynaBean(bean);
|
||||
User user2 = bean2.getBean();
|
||||
User user1 = bean.getBean();
|
||||
Assert.assertEquals(user1, user2);
|
||||
|
||||
//执行指定方法
|
||||
Object invoke = bean2.invoke("testMethod");
|
||||
Assert.assertEquals("test for 李华", invoke);
|
||||
}
|
||||
|
||||
public static class User{
|
||||
private String name;
|
||||
private int age;
|
||||
|
Loading…
x
Reference in New Issue
Block a user