169 похожих чатов

Hello everybody Тема - Reflection Я тут хочу написать функцию которая достаёт

названия полей из класса (и case и обычного тоже)

написал такое

case class Pers(name: String, age: Int)
class Car(name: String)

val p = Pers("Ivan", 2)
val c = new Car("BMV")

import scala.reflect.runtime.universe._

def getListOfFields(p: Object): List[String] = {
val m = runtimeMirror(p.getClass.getClassLoader)

val symbol = m.classSymbol(p.getClass).typeSignature.typeSymbol.asClass
val ctor = symbol.primaryConstructor

val paramList = ctor.typeSignature.paramLists
paramList.flatten.map(s => s.name.toString)
}

getListOfFields(p)
getListOfFields(c)

//val res3: List[String] = List(name, age)
//val res4: List[String] = List(name)

Это же можно как-то проще написать? А то как-то слишком cumbersome
Но зато так работает

3 ответов

9 просмотров

Shapeless

А какая изначально задача решается?

https://www.scala-lang.org/api/current/scala/Product.html#productElementNames:Iterator[String]

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта