У меня есть черта, которая переопределяет toString
для печати значений всех полей:
/**
* Interface for classes that provide application configuration.
*/
trait Configuration {
/** abstract fields defined here. e.g., **/
def dbUrl: String
/**
* Returns a list of fields to be excluded by [[toString]]
*/
protected def toStringExclude: Seq[String]
/**
* Returns a String representation of this object that prints the values for all configuration fields.
*/
override def toString: String = {
val builder = new StringBuilder
val fields = this.getClass.getDeclaredFields
for (f <- fields) {
if (!toStringExclude.contains(f.getName)) {
f.setAccessible(true)
builder.append(s"${f.getName}: ${f.get(this)}\n")
}
}
builder.toString.stripSuffix("\n")
}
}
Конкретный класс в настоящее время выглядит так:
class BasicConfiguration extends Configuration {
private val config = ConfigFactory.load
override val dbUrl: String = config.getString("app.dbUrl")
/**
* @inheritdoc
*/
override protected def toStringExclude: Seq[String] = Seq("config")
}
Проблема в том,если бы config
были переименованы в какой-то момент, среда IDE пропустила бы "config"
в toStringExclude
, поскольку это всего лишь строка.Поэтому я пытаюсь найти способ получить имя поля в виде строки, например getFieldName(config)
.