scala - 如何在 Scala 的 JCommander 中使用数组
问题描述
我想使用 JCommander 来解析 args。
我写了一些代码:
import com.beust.jcommander.{JCommander, Parameter}
import scala.collection.mutable.ArrayBuffer
object Config {
@Parameter(names = Array("--categories"), required = true)
var categories = new ArrayBuffer[String]
}
object Main {
def main(args: Array[String]): Unit = {
val cfg = Config
JCommander
.newBuilder()
.addObject(cfg)
.build()
.parse(args.toArray: _*)
println(cfg.categories)
}
}
但是它失败了
com.beust.jcommander.ParameterException: Could not invoke null
Reason: Can not set static scala.collection.mutable.ArrayBuffer field InterestRulesConfig$.categories to java.lang.String
我究竟做错了什么?
解决方案
JCommander 使用有关 Java 中类型的知识将值映射到参数。但是 Java 没有 type scala.collection.mutable.ArrayBuffer
。它有一个类型java.util.List
。如果你想使用 JCommander,你必须坚持 Java 的内置类型。
推荐阅读
- pentaho - 将值 [BigNumber] 转换为 BigNumber 时出现意外的转换错误
- excel - 将数据从工作簿(在文本框内)放到另一个工作簿(在工作表中)
- elixir - 透析器不知道:httpc
- redirect - 我无法从 Spotify 为我的应用检索访问令牌
- c# - Unity使用触摸旋转相机 - 移动
- javascript - javascript中的构造函数参数
- reactjs - 用 jest 和 react-testing-library 测试反应上下文
- sql - 如何在 NorthWind SQL Server 上执行聚合?
- spring - Spring Boot Reactive Redis 2连接工厂导致健康检查失败
- shell - 我想使用 sed 替换 html 文件中的时间戳