2015-11-27 3 views
1

Рассмотрим класс с большим количеством значенийScala динамически доступ к полю в классе

class Test { 
    val a1 = "test1" 
    val a2 = "test2" 
    .. 
    .. 
    val a25 = "test25" 
} 

Может функция, как это быть написаны для доступа к п-й переменной.

def getVar(n: Int, test: Test) = { 
    test.("test"+n) //something like this to access the nth variable 
} 

Я знаю, что это может быть сделано с коллекцией, но мой вопрос заключается в том, можно ли это отражать.

ответ

4
val field = test.getClass.getDeclaredFields.apply(n) 
field.setAccessible(true) 
field.get(test) 
0

использование динамического

import scala.Dynamic 
import scala.language.dynamics 

object Test extends Dynamic { 
    val a1 = "test1" 
    val a2 = "test2" 
    val a3 = "test3" 
    val list = List(a1, a2, a3) 

    def selectDynamic(s: String) = { 
    list(s.replace("test", "").toInt-1) 
    } 
} 

assert(Test.list(1) == Test.test2) 
Смежные вопросы