Reflexión de Kotlin: creación de objects desde CSV

Tengo una class de datos llamada Miembro:

data class Member(){ val first_name: String val last_name: String //30 more //a few simple methods } 

Estoy tratando de importar un file CSV. Cada línea del file contiene los campos que quiero usar para crear instancias de mis Miembros.

 fun ReadCsvFileKotlin() { val csvFile = "C:\\Data.csv" var memberList = mutableListOf<Member>() var reader = File(csvFile).readLines() var mbr: Member class Member(val p: Int) val prop = Member::p for(line in reader){ val mbrProperties = line.split(",") for(i in 0..mbrProperties.lastIndex){ //assign mbrProperties[i] to mbr property //mbrProperties[0] = "Bob" //mbr.first_name = "Bob" //Member::p = mbrProperties[i] } memberList.add(mbr) } 

Hice mi investigación, pero estoy fallando en entender la información que he leído y no puedo cerrar la brecha entre dónde estoy y dónde quiero estar.

¡Cualquier consejo sería apreciado! Visitarme o darme ejemplos usando mi código de ejemplo sería bienvenido.

Antecedentes: estoy automatizando testings para un website. Antes de ejecutar cada testing, el miembro que cumple con los criterios de testing necesarios se selecciona de una list, que se rellena desde el file CSV. Estoy buscando crear mis objects miembros de esta manera para networkingucir los gastos generales de mantenimiento a medida que se expande el scope de la testing y se agregan criterios adicionales (y campos de class de miembro).

¿Por qué estoy haciendo algo de esto de la manera que estoy haciendo? Porque todavía tengo mucho que aprender … (Entonces, si ves una mejor manera, ¡por favor, enséñame!)

¡Gracias!

La forma más simple de resolver esto es no utilizar la reflexión en absoluto. Puede pasar los valores de las properties directamente al constructor de la class:

 data class Member(val firstName: String, val lastName: String) fun readCsvFileKotlin() { // ... for (line in reader) { val mbrProperties = line.split(",") memberList.add(Member(mbrProperties[0], mbrProperties[1])) } } 

Si desea establecer properties a través de la reflexión, debe declararlas como var lugar de val , de modo que puedan modificarse una vez que se haya creado el object. Luego puede usar el método set en el object de propiedad para cambiar el valor de la propiedad:

 data class Member(var firstName: String? = null, var lastName: String? = null) fun readCsvFileKotlin() { // ... val prop = Member::firstName for (line in reader) { val mbrProperties = line.split(",") val member = Member() prop.set(member, mbrProperties[0]) memberList.add(member) } }