Tôi muốn (tĩnh) phản ánh một lớp học mẫu như thế này:Cách tốt nhất để phản ánh các trường kiểu lớp trong scala 2.11 là gì?
case class Foo[T,U](stuff:T, more:U, age:Int) {
val ignore:Boolean = false
}
tôi bắt đầu như thế này:
val symbol = currentMirror.classSymbol(clazz) // symbol is universe.ClassSymbol
// I want to know about type placeholders T and U
val typeParamArgs = symbol.typeParams.map(tp => tp.name.toString)
if(symbol.isCaseClass) {
val tsig = symbol.typeSignature
println(tsig)
}
Ok, vào thời điểm này nếu tôi in Tsig tôi thấy:
[T, U]scala.AnyRef
with scala.Product
with scala.Serializable {
val stuff: T
private[this] val stuff: T
val more: U
private[this] val more: U
val age: scala.Int
private[this] val age: scala.Int
def <init>(stuff: T,more: U,age: scala.Int): co.blocke.Foo[T,U]
val ignore: scala.Boolean
private[this] val ignore: scala.Boolean
def copy[T, U](stuff: T,more: U,age: scala.Int): co.blocke.Foo[T,U]
def copy$default$1[T, U]: T @scala.annotation.unchecked.uncheckedVariance
def copy$default$2[T, U]: U @scala.annotation.unchecked.uncheckedVariance
def copy$default$3[T, U]: scala.Int @scala.annotation.unchecked.uncheckedVariance
override def productPrefix: java.lang.String
def productArity: scala.Int
def productElement(x$1: scala.Int): scala.Any
override def productIterator: Iterator[scala.Any]
def canEqual(x$1: scala.Any): scala.Boolean
override def hashCode(): scala.Int
override def toString(): java.lang.String
override def equals(x$1: scala.Any): scala.Boolean
}
Xem dòng ở giữa với <init>? Đó là tuyên bố tôi muốn nhìn vào. Nó có những gì tôi cần.
Làm cách nào để tôi có thể chọn tsig (universe.Type) để nhận thông tin về <init>? (Tôi không muốn thông tin về 'bỏ qua'.)