mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix bug#I3AXIJ
This commit is contained in:
@@ -249,12 +249,14 @@ public class BeanDesc implements Serializable {
|
||||
* @return 是否匹配
|
||||
*/
|
||||
private boolean isMatchGetter(String methodName, String fieldName, boolean isBooleanField, boolean ignoreCase) {
|
||||
// 全部转为小写,忽略大小写比较
|
||||
final String handledFieldName;
|
||||
if (ignoreCase) {
|
||||
// 全部转为小写,忽略大小写比较
|
||||
methodName = methodName.toLowerCase();
|
||||
fieldName = fieldName.toLowerCase();
|
||||
handledFieldName = fieldName.toLowerCase();
|
||||
fieldName = handledFieldName;
|
||||
} else {
|
||||
fieldName = StrUtil.upperFirst(fieldName);
|
||||
handledFieldName = StrUtil.upperFirst(fieldName);
|
||||
}
|
||||
|
||||
if (false == methodName.startsWith("get") && false == methodName.startsWith("is")) {
|
||||
@@ -271,12 +273,12 @@ public class BeanDesc implements Serializable {
|
||||
if (fieldName.startsWith("is")) {
|
||||
// 字段已经是is开头
|
||||
if (methodName.equals(fieldName) // isName -》 isName
|
||||
|| methodName.equals("get" + fieldName)// isName -》 getIsName
|
||||
|| methodName.equals("is" + fieldName)// isName -》 isIsName
|
||||
|| methodName.equals("get" + handledFieldName)// isName -》 getIsName
|
||||
|| methodName.equals("is" + handledFieldName)// isName -》 isIsName
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
} else if (methodName.equals("is" + fieldName)) {
|
||||
} else if (methodName.equals("is" + handledFieldName)) {
|
||||
// 字段非is开头, name -》 isName
|
||||
return true;
|
||||
}
|
||||
@@ -304,9 +306,15 @@ public class BeanDesc implements Serializable {
|
||||
* @return 是否匹配
|
||||
*/
|
||||
private boolean isMatchSetter(String methodName, String fieldName, boolean isBooleanField, boolean ignoreCase) {
|
||||
// 全部转为小写,忽略大小写比较
|
||||
methodName = methodName.toLowerCase();
|
||||
fieldName = fieldName.toLowerCase();
|
||||
final String handledFieldName;
|
||||
if (ignoreCase) {
|
||||
// 全部转为小写,忽略大小写比较
|
||||
methodName = methodName.toLowerCase();
|
||||
handledFieldName = fieldName.toLowerCase();
|
||||
fieldName = handledFieldName;
|
||||
} else {
|
||||
handledFieldName = StrUtil.upperFirst(fieldName);
|
||||
}
|
||||
|
||||
// 非标准Setter方法跳过
|
||||
if (false == methodName.startsWith("set")) {
|
||||
@@ -314,7 +322,7 @@ public class BeanDesc implements Serializable {
|
||||
}
|
||||
|
||||
// 针对Boolean类型特殊检查
|
||||
if (isBooleanField && fieldName.startsWith("is")) {
|
||||
if (isBooleanField && handledFieldName.startsWith("is")) {
|
||||
// 字段是is开头
|
||||
if (methodName.equals("set" + StrUtil.removePrefix(fieldName, "is"))// isName -》 setName
|
||||
|| methodName.equals("set" + fieldName)// isName -》 setIsName
|
||||
@@ -327,4 +335,4 @@ public class BeanDesc implements Serializable {
|
||||
return methodName.equals("set" + fieldName);
|
||||
}
|
||||
// ------------------------------------------------------------------------------------------------------ Private method end
|
||||
}
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@ import org.junit.Test;
|
||||
|
||||
/**
|
||||
* {@link BeanDesc} 单元测试类
|
||||
*
|
||||
*
|
||||
* @author looly
|
||||
*
|
||||
*/
|
||||
@@ -20,48 +20,48 @@ public class BeanDescTest {
|
||||
Assert.assertEquals("getAge", desc.getGetter("age").getName());
|
||||
Assert.assertEquals("setAge", desc.getSetter("age").getName());
|
||||
Assert.assertEquals(1, desc.getSetter("age").getParameterTypes().length);
|
||||
Assert.assertEquals(int.class, desc.getSetter("age").getParameterTypes()[0]);
|
||||
|
||||
Assert.assertSame(int.class, desc.getSetter("age").getParameterTypes()[0]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void propDescTes2() {
|
||||
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
|
||||
|
||||
|
||||
PropDesc prop = desc.getProp("name");
|
||||
Assert.assertEquals("name", prop.getFieldName());
|
||||
Assert.assertEquals("getName", prop.getGetter().getName());
|
||||
Assert.assertEquals("setName", prop.getSetter().getName());
|
||||
Assert.assertEquals(1, prop.getSetter().getParameterTypes().length);
|
||||
Assert.assertEquals(String.class, prop.getSetter().getParameterTypes()[0]);
|
||||
Assert.assertSame(String.class, prop.getSetter().getParameterTypes()[0]);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void propDescOfBooleanTest() {
|
||||
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
|
||||
|
||||
|
||||
Assert.assertEquals("isAdmin", desc.getGetter("isAdmin").getName());
|
||||
Assert.assertEquals("setAdmin", desc.getSetter("isAdmin").getName());
|
||||
Assert.assertEquals("isGender", desc.getGetter("gender").getName());
|
||||
Assert.assertEquals("setGender", desc.getSetter("gender").getName());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void propDescOfBooleanTest2() {
|
||||
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
|
||||
|
||||
|
||||
Assert.assertEquals("isIsSuper", desc.getGetter("isSuper").getName());
|
||||
Assert.assertEquals("setIsSuper", desc.getSetter("isSuper").getName());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getSetTest() {
|
||||
BeanDesc desc = BeanUtil.getBeanDesc(User.class);
|
||||
|
||||
|
||||
User user = new User();
|
||||
desc.getProp("name").setValue(user, "张三");
|
||||
Assert.assertEquals("张三", user.getName());
|
||||
|
||||
|
||||
Object value = desc.getProp("name").getValue(user);
|
||||
Assert.assertEquals("张三", value);
|
||||
}
|
||||
@@ -101,7 +101,7 @@ public class BeanDescTest {
|
||||
public void setAdmin(boolean isAdmin) {
|
||||
this.isAdmin = isAdmin;
|
||||
}
|
||||
|
||||
|
||||
public boolean isIsSuper() {
|
||||
return isSuper;
|
||||
}
|
||||
|
Reference in New Issue
Block a user