scala - 在将构造函数参数传递给 Scala 中的超类构造函数之前修改构造函数参数
问题描述
我有一个超类:
class Filter(val param: ComplexFilterParams){
def this(config: String) = this(parseStrConfig(config))
我需要创建一个获取字符串参数的子类,然后以另一种方式解析它并创建 ComplexFilterParams。
像这样的东西:
class NewFilter(str:String) extends Filter {
有没有办法做到这一点?
我有一个解决方案。但我认为它很丑。我创建伴随对象,在那里定义一个转换方法,然后执行以下操作:
class NewFilter(str:String) extends Filter(NewFilter.convert(str)) {
解决方案
您可以使用apply
伴随对象中的另一个实现更轻松,例如:
class NewFilter(val param: ComplexFilterParams) extends Filter(param){
//other implementations
}
object NewFilter {
def apply(str: String) = new NewFilter(convert(str))
def convert(str: String): ComplexFilterParams = ...
}
val filter = NewFilter("config string")
推荐阅读
- python-3.x - 如何从具有@given构造函数的函数返回值
- tensorflow - 当使用更高版本的 tf serving 从更低版本的 tensorflow 服务模型时会发生什么?
- elasticsearch - ElasticSearch.net 附件搜索数组正在返回带有搜索结果的所有附件如何仅检索命中
- gmail-api - 使用 Gmail API 发送的邮件的收件人数量是否有限制?
- reactjs - 动作完成后与 react-router-dom 反应被拉回页面之前
- python - 从 ListAPIView Django 3.0 Rest Framework 返回自定义 JSON 响应
- c# - 如何打印没有硬代码字符串的函数名称?
- web-scraping - 工作几个月后,Apify 任务突然返回 403 和 503 错误
- c# - 在 Telerik RadMenuComboItem 中隐藏高亮边框
- rspec - 比较相等性时 rspec 中的自定义错误消息