我在hadoop工作中收到了这个错误。 java.lang.NoSuchMethodException: <PackageName>.<ClassName>.<init>(<parameters>)
在大多数scala代码中,您可以在编译时使用它。但由于这个作业是在运行时调用的,所以我没有在编译时捕获它。
我认为默认参数会导致创建具有两个签名的构造函数,其中一个使用单个参数。
class BasicDynamicBlocker(args: Args, evaluation: Boolean = false) extends Job(args) with HiveAccess {
//I NEEDED THIS TOO:
def this(args: Args) = {
this(args, false)
}
... }
我学到了使用 this
. (我想把这个写出来,以防对别人有帮助。)我还有一个小问题。对我来说还是多余的。scala语言的设计限制要求这样做有什么原因吗?
1条答案
按热度按时间sh7euo9m1#
当您使用默认参数时,您不会为每个可能的情况生成重载,例如:
您希望编译器生成
但事实并非如此。
您将为每个默认参数生成方法(在companion对象中)
不管你在密码里说什么
它将被更改为
所以在你的例子中,有签名的构造函数
this(args: Args)
只是不存在,只有2参数版本。您可以在此处阅读更多内容:http://docs.scala-lang.org/sips/completed/named-and-default-arguments.html