一个简单的用Scala写的获取bean属性的例子。核心方法是Introspector#getBean(Class>)。
import java.beans.Introspector
object GetBeanProperties {
class Person(id: Long, name: String) {
def getId = id
def getName = name
}
def main(args: Array[String]): Unit = {
println(GetBeanProperties(null))
println(GetBeanProperties(new Person(1L, "xnnyygn")))
}
def apply[T](bean: T): Map[String, Any] = Option(bean) match {
case None => Map[String, Any]()
case _ => doApply(bean)
}
private def doApply[T](bean: T): Map[String, Any] = {
Introspector.getBeanInfo(bean.getClass).getPropertyDescriptors.flatMap { d =>
Option(d.getReadMethod).map(getter => (d.getName, getter.invoke(bean)))
}.toMap - "class"
}
}