我有一个构造函数,其签名如下:
class Event[DL <: HList](
detailsIn: DL
)(implicit lbcr: LUBConstraint[DL, EventDetail[_]]) { ...
在伴生对象中,我有如下内容:
def apply[DL <: HList](
detailIn: String*
)(implicit lbcr: LUBConstraint[DL, EventDetail[String]]) =
new Event(
if (detailIn.map(deet => EventDetail(deet)).toList.size == 1)
detailIn.map(deet => EventDetail(deet)).toList.toHList[String :: HNil].get
else throw new NotImplementedException()
)(lbcr)
不可否认,这个apply方法可以进行清理。
这将产生以下错误,我实在是不知道如何处理:
Error:(87, 7) type mismatch;
found : shapeless.LUBConstraint[DL,edu.cornell.ansci.dairy.econ.model.event.EventDetail[String]]
required: shapeless.LUBConstraint[shapeless.::[String,shapeless.HNil],edu.cornell.ansci.dairy.econ.model.event.EventDetail[_]]
问题的第二部分:有没有办法使这个多态化在detailIn的大小上?根据我阅读的其他资料,我认为不行,在Scala中我想不到任何方法。我能做的最好的事情是支持方便地为detailIn字符串序列提供固定数量的长度,如果超过了这个长度,类的用户必须直接使用HList。