Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- data class H(
- val k: K?,
- ...,
- val z: Z?
- )
- ... ... ... ...
- data class K(
- var h: String?,
- var k: Boolean?,
- ...,
- var z: Int?
- )
- ... ... ... ...
- data class A(
- val h: H?,
- ...,
- val z: Z?
- )
- val breadCrumb : MutableList<String> = mutableListOf("h", "k", ..., "z")
- val a = A(...)
- a.h.k.....z = "new value"
- var curItem: Any = A(...)
- for (itemName in breadCrumb){
- ...
- for(dataField in curItem::class.java.fields) {
- if(dataField.get(curItem).name == itemName){
- when(dataField.type.simpleName){
- "String" -> dataField .set(curItem, value.text)
- "Integer" -> dataField .setInt(curItem, value.text as Int)
- "Float" -> dataField .setFloat(curItem, value.text as Float)
- "Boolean" -> dataField .setBoolean(curItem, value.text as Boolean)
- }
- ..........
- curItem = dataField.java.get(curItem)
- }
- }
- }
- fun setValue(field: JSONUIField, value: JSONUIValue) {
- var curItem: Any = A.getAsJsonObject("a")
- for (itemName in breadCrumb) {
- if ((curItem as JsonObject).getAsJsonObject(itemName) == null)
- curItem.add(itemName, JsonObject())
- curItem = curItem.getAsJsonObject(itemName)
- }
- when (field.type) {
- "String" -> (curItem as JsonObject).addProperty(field.name, value.value)
- "Integer" -> (curItem as JsonObject).addProperty(field.name, (value.value)!!.toInt())
- "Float" -> (curItem as JsonObject).addProperty(field.name, (value.value)!!.toFloat())
- "Boolean" -> (curItem as JsonObject).addProperty(field.name, (value.value)!!.toBoolean())
- }
- }
- val curItem = A("", false, 0)
- val itemNames = listOf("a", "b", "c")
- val itemStrValue = "test"
- val itemIntValue = "10"
- val itemFloatValue = "5.0"
- val itemBooleanValue = "true"
- for(dataField in curItem::class.declaredMemberProperties) {
- for (itemName in itemNames) {
- if (dataField.name == itemName) {
- val mutableProp = dataField as? KMutableProperty1<Any, Any>
- if (mutableProp != null) {
- when (dataField.returnType.classifier as KClass<Any>) {
- String::class -> mutableProp.set(curItem, itemStrValue)
- Int::class -> mutableProp.set(curItem, itemIntValue.toInt())
- Float::class -> mutableProp.set(curItem, itemFloatValue.toFloat())
- Boolean::class -> mutableProp.set(curItem, itemBooleanValue.toBoolean())
- }
- }
- }
- }
- }
- println(curItem) // A(a=test, b=true, c=10)
- data class A(
- var a: String?,
- var b: Boolean?,
- var c: Int?
- )
Add Comment
Please, Sign In to add comment