Scala
反射
Scala自动为类中的属性提供 get\set 方法
get: fieldname()
set: fieldname_$eq(参数类型)
例如
srcObject: AnyRef = ???
destObject: AnyRef = ???
val srcFields: Array[Field] = srcObject.getClass.getDeclaredFields
for (srcField: Field <- srcFields) {
Breaks.breakable {
/*
Scala自动为类中的属性提供 get\set 方法
*/
val getSrcFieldName: String = srcField.getName
val setSrcFieldName: String = s"${getSrcFieldName}_$$eq" // 打印 $ 使用双$转义
val getMethod: Method = srcObject.getClass.getDeclaredMethod(getSrcFieldName)
val setMethod: Method =
try{
destObject.getClass.getDeclaredMethod(setSrcFieldName, srcField.getType)
} catch {
case ex: Exception => Breaks.break()
}
val destField: Field =
try {
destObject.getClass.getDeclaredField(srcField.getName)
} catch {
case ex: Exception => Breaks.break()
}
if (destField.getModifiers.equals(Modifier.FINAL)) {
Breaks.break()
}
setMethod.invoke(destObject, getMethod.invoke(srcObject))
}