强制参数是案例类

时间:2018-07-25 20:30:13

标签: scala generics

我正在尝试构建一个带有通用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 */
 }

像这样可能吗?还有,什么是最佳做法?

0 个答案:

没有答案