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);
|
return new DynaBean(bean);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个{@link DynaBean}
|
||||||
|
*
|
||||||
|
* @param beanClass Bean类
|
||||||
|
* @return {@link DynaBean}
|
||||||
|
*/
|
||||||
|
public static DynaBean create(Class<?> beanClass) {
|
||||||
|
return new DynaBean(beanClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建一个{@link DynaBean}
|
* 创建一个{@link DynaBean}
|
||||||
*
|
*
|
||||||
@ -54,6 +65,15 @@ public class DynaBean extends CloneSupport<DynaBean> implements Serializable {
|
|||||||
this(ReflectUtil.newInstance(beanClass, params));
|
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);
|
return (T) ((Map<?, ?>) bean).get(fieldName);
|
||||||
} else {
|
} else {
|
||||||
final PropDesc prop = BeanUtil.getBeanDesc(beanClass).getProp(fieldName);
|
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);
|
throw new BeanException("No public field or get method for {}", fieldName);
|
||||||
}
|
}
|
||||||
return (T) prop.getValue(bean);
|
return (T) prop.getValue(bean);
|
||||||
@ -97,7 +117,7 @@ public class DynaBean extends CloneSupport<DynaBean> implements Serializable {
|
|||||||
* @return 是否有bean属性
|
* @return 是否有bean属性
|
||||||
* @since 5.4.2
|
* @since 5.4.2
|
||||||
*/
|
*/
|
||||||
public boolean containsProp(String fieldName){
|
public boolean containsProp(String fieldName) {
|
||||||
return null != BeanUtil.getBeanDesc(beanClass).getProp(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);
|
((Map) bean).put(fieldName, value);
|
||||||
} else {
|
} else {
|
||||||
final PropDesc prop = BeanUtil.getBeanDesc(beanClass).getProp(fieldName);
|
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);
|
throw new BeanException("No public field or set method for {}", fieldName);
|
||||||
}
|
}
|
||||||
prop.setValue(bean, value);
|
prop.setValue(bean, value);
|
||||||
|
@ -34,6 +34,56 @@ public class DynaBeanTest {
|
|||||||
Assert.assertEquals("test for 李华", invoke);
|
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{
|
public static class User{
|
||||||
private String name;
|
private String name;
|
||||||
private int age;
|
private int age;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user