我正在尝试构建一个带有通用case类的函数,但我想确保传递的参数确实是case类。
搜索仅发现与具有自定义案例类的继承有关的内容,而与泛型案例类无关。一种保证的,更混乱的方法是使用反射在case class
之前对传递的do things
对象进行检查。如果不是这种情况,请抛出异常:
def handleCaseClass[A](caseClass:A):Unit = {
val isCaseClass = // use reflection to check
if (isCaseClass) { /*do work */ } else { throw invalidArgumentException }
}
这可能会有点混乱,但没什么大不了的。我想知道是否有使用类型限制的更干净的方法,但是我四处搜寻,找不到类似的东西:
def handleCaseClass[A <: ???](caseClass:A):Unit = {
/* do work */
}
像这样可能吗?还有,什么是最佳做法?