【问题标题】:Getting the class for Main in Scala在 Scala 中获取 Main 类
【发布时间】:2011-06-04 16:05:39
【问题描述】:

如果我创建一个没有伴生类的单例对象Main,有没有办法获得该单例的类? classOf[Main] 给出错误:“未找到:键入 Main”。

【问题讨论】:

  • 如果您想使用它来启动具有 main 方法的程序,该方法是同名类的伴随对象的一部分 - 它不起作用。无论出于何种原因,Scala 仅对非伴生对象的 main 方法进行特殊处理。
  • @Madoc:我认为这已在 2.8.0 中修复。无论如何,我仍然创建了一个没有同伴的 Main 对象。它通常只包含main 方法。

标签: class scala main


【解决方案1】:

单例对象,也就是模块,没有“类”,因为您不能从它们继承。将单例和类视为相反的概念。

他们确实有一个类型:

object Main

def test(a: Main.type): Unit = println("Got: " + a)

test(Main)

【讨论】:

【解决方案2】:

由于它是一个类的实例,您可以使用方法Main.getClass 来完成它。

在幕后,JVM 知道 Main 是名为 Main$ 的类的实例,如果需要,可以通过 Java 反射方法访问它。

说了这么多,Scala 中通常很少需要反射,所以你不应该真的需要这个,除非你只是在学习一些有趣的理论。

【讨论】:

  • 用例:val buildNumber = try { new Manifest(new URL("jar:" + classOf[Main].getProtectionDomain.getCodeSource.getLocation + "!/META-INF/MANIFEST.MF").openStream).getMainAttributes.getValue("Build-Number") } catch { case _: ZipException => "0" }
猜你喜欢
  • 1970-01-01
  • 2012-01-09
  • 2015-07-19
  • 2013-04-25
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多