如何设置属性(即通过BeanUtils)而不知道它的类型

时间:2013-04-09 13:57:42

标签: java reflection javabeans apache-commons-beanutils

我需要设置JavaBean的一些属性。我有一个通用Map<String, String>,其中第一个String是属性的 Name ,第二个String表示它的值。

现在,如果地图如下所示:

"greeting" : "Hello"
"cool" : "true"
"amount" : "42"

我在bean中的setter看起来像这样:

public void setGreeting(String greeting);
public void setCool(boolean cool);
public void setAmount(int amount);

我需要将这些属性设置为:

BeanUtils.setProperty(myBean, "amount", myMap.get("amount"));

以便BeanUtils找到正确的方法并将String转换为正确的类型。在API文档的大多数地方,它都说“没有类型转换”但我在API文档中发现了很多转换器,所以我认为必须有这样做的方法。

如何让BeanUtils在不知道其类型的情况下找到正确的方法?

2 个答案:

答案 0 :(得分:1)

javadoc说:

  

设置指定的属性值,根据需要执行类型转换以符合目标属性的类型。

因此它应该自动转换您的值。

答案 1 :(得分:1)

根据课程ConvertUtilsBean的文档,您可以自动从StringString[]转换为目标类型的类型为:

  • java.lang.BigDecimal(无默认值)
  • java.lang.BigInteger(无默认值)
  • boolean and java.lang.Boolean(默认为false)
  • byte and java.lang.Byte(默认为零)
  • char and java.lang.Character(默认为空格)
  • java.lang.Class(无默认值)
  • double and java.lang.Double(默认为零)
  • float and java.lang.Float(默认为零)
  • int and java.lang.Integer(默认为零)
  • long and java.lang.Long(默认为零)
  • short and java.lang.Short(默认为零)
  • java.lang.String(默认为null)
  • java.io.File(无默认值)
  • java.net.URL(无默认值)
  • java.sql.Date(无默认值)
  • java.sql.Time(无默认值)
  • java.sql.Timestamp(无默认值)

如果您需要其他转换器或替换某人,您可以在Convert Utils Demo中找到一个很好的示例。