请考虑以下代码:
trait GeneralTrait[T] {
def getClassName() = ???
def params() = ???
}
case class SomeClass(id: Long, name: String)
class ConcreteClass extends GeneralTrait[SomeClass]
是否可以让getClassName()
返回字符串'SomeClass'
并使params()
返回列表['id', 'name']
?
答案 0 :(得分:3)
嗯......我不确定你究竟想做什么。
但是,你可以实现以下大部分内容,
trait GeneralTrait { self =>
def getClassName() = self.getClass.getSimpleName
def params() = self.getClass.getConstructors.apply(0).getParameters
}
case class SomeClass(id: Long, name: String) extends GeneralTrait
val sc = SomeClass(5, "some")
sc.getClassName()
//res0: String = SomeClass
sc.params()
//res1: Array[java.lang.reflect.Parameter] = Array(final A$A55$A$A55 $outer, final long id, final java.lang.String name)
答案 1 :(得分:3)
我建议你总是使用scala反射代替java反射。在编译期间,类和方法的名称往往会出现乱码。 Java并不知道scala,所以它总会给你带来乱码。
如果您需要有关类型参数的信息,则无论如何都必须使用scala反射。
.container {
background-color: red;
width: 20px;
height: 20px;
}
.outlined {
border: 3px solid blue;
background-color: green;
width: 100%;
height: 100%;
}