我想问一下如何实现在斯卡拉以下。 考虑
scala> case class C(i:Int)
defined class C
scala> val c = C(1)
c: C = C(1)
鉴于关注的一个领域,在这种情况下,
scala> val fname = "i"
fname: String = i
我们想找回我场在c中的原始值和类型。
第一,天真,尝试包括以下内容,
scala> val f = c.getClass.getDeclaredField(fname)
f: java.lang.reflect.Field = private final int C.i
scala> f.setAccessible(true)
scala> f.getType
res3: Class[_] = int
然而,
scala> val a:Int = f.get(c)
<console>:11: error: type mismatch;
found : Object
required: Int
val a:Int = f.get(c)
^
换句话说,如何在C为我取的int值(*)
scala> :type -v case class C(i:Int)
// Type signature
AnyRef
with Product
with Serializable {
val i: Int <----------------------- (*)
private[this] val i: Int
def <init>(i: Int): C
def copy(i: Int): C
...
并且不一定是int类型,考虑d J区域,
scala> case class C(i:Int)
defined class C
scala> case class D(j:C)
defined class D
scala> :type -v case class D(j:C)
// Type signature
AnyRef
with Product
with Serializable {
val j: C
private[this] val j: C
def <init>(j: C): D
def copy(j: C): D
...
非常感谢...
综上所述
特定
scala> f.get(c)
res1: Object = 1
和
scala> f.getType
res3: Class[_] = int
如何获得
val a = 1
其中,a是int类型的,并且知道仅从f.getType类型。