如何将java.io.Serializable转换为Scala的Seq序列?
将Either匹配结果转换为Scala Seq序列
你的问题核心在于当前match语句的两个分支返回类型不一致,导致编译器推断结果类型为java.io.Serializable(Exception和List[TableInfo]的共同父类)。要得到Seq[TableInfo],只需统一两个分支的返回类型即可,以下是两种实现方式:
方式1:修改match语句统一返回类型
因为List本身就是Seq的子类,所以Right分支的List[TableInfo]可以直接作为Seq使用。针对Left分支,你可以选择抛出异常或者返回空序列,示例如下:
// 抛出异常(适合不允许Left场景的业务逻辑) val seqResult: Seq[TableInfo] = result match { case Left(ex) => throw ex case Right(tableList) => tableList } // 返回空序列(适合容错场景) val seqResult: Seq[TableInfo] = result match { case Left(_) => Seq.empty[TableInfo] case Right(tableList) => tableList }
方式2:使用Either的fold方法简化处理
Scala的Either提供了fold方法,可以更简洁地处理左右分支,同时统一返回类型:
// 自定义Left分支的处理逻辑,这里返回空序列示例 val seqResult: Seq[TableInfo] = result.fold( _ => Seq.empty[TableInfo], tableList => tableList )
这样处理后,seqResult的类型就明确为Seq[TableInfo],满足你的需求。
内容的提问来源于stack exchange,提问作者Vish0111
相关产品推荐
相关产品推荐

