给定以下类及其伴随对象:
class B extends A
object B extends B
其中,A是另一个文件中的抽象类:
abstract class A {
def main(args: Array[String]): Unit = println("hey")
}
上面的代码使用sbt汇编插件打包到一个uber-jar中,其中的入口点是从class B
继承的object B
main方法。
上面的工作很好。它运行。完全没有问题。
然而,sbt不断警告:
[warn] B has the main method with parameter type Array[String], but B will not be a runnable program.
[warn] Reason: companion contains its own main method, which means no static forwarder can be generated.
[warn] object B extends B
1.你知道这个警告的意思吗?
1.为什么sbt保证object B
不会运行,不会发生?
- 谢谢-谢谢
2条答案
按热度按时间dwthyt8l1#
它不适合我。
我有这个文件
B.scala
。当我尝试运行
foo.bar.B
时,出现错误:类
B
包含一个从类A
继承的非静态主方法。在一个类中不能有两个名称和类型签名完全相同的方法,即使一个是静态的,另一个是非静态的。这意味着编译器不能在class中生成静态main方法B
,它转发到objectB
中的非静态主方法。我不知道为什么它对你来说运行正确。
要避免这个问题并不难,只是不要将伴随对象作为入口点,也就是说,重命名类
B
或对象B
。col17t5w2#
对于一个java中可运行的类,
main
需要是静态的。你的不是,所以,对象是不可运行的。这就是编译器告诉你的。只需将
A
中的main
重命名为其他名称,然后在调用它的对象中添加一个main
。