2011-01-06 3 views
2

Если я создаю одноэлементный объект Main без сопутствующего класса, есть ли способ получить класс этого синглтона? classOf[Main] дает сообщение об ошибке: "not found: type Main".Получение класса для Main в Scala

+0

Если вы хотите использовать это, чтобы запустить программу с основным методом, который является частью объекта-компаньона для класса с тем же именем, он не будет работать. У Scala только специальная обработка основного метода для объектов, которые не являются компаньонами, по любой причине. – Madoc

+0

@Madoc: Я думал, что исправлено в 2.8.0. В любом случае, я все еще создаю объект 'Main' без компаньона. Обычно он просто содержит метод «main». – Ralph

ответ

3

Как это экземпляр класса, вы можете использовать метод Main.getClass, чтобы вытащить этот прочь.

За кулисами JVM знает, что Main - это экземпляр класса с именем Main$, и при необходимости его можно получить с помощью методов отражения Java.

Сказав все это, в Scala, как правило, очень мало потребности в отражении, поэтому вам не нужно действительно это делать, если только вы не сразу после интересной теории.

+0

Использование case: 'val buildNumber = try { новый манифест (новый URL-адрес ("jar:" + classOf [Main] .getProtectionDomain.getCodeSource.getLocation + "! /META-INF/MANIFEST.MF"). openStream) .getMainAttributes.getValue ("Build-Number")} catch {case _: ZipException => "0"} ' – Ralph

+0

Спасибо. Ваше решение сработало. – Ralph

0

Объекты Singleton, также называемые модулями, не имеют «класса», поскольку вы не можете наследовать их. Подумайте о синглетоне и классе как о противоположных понятиях.

Они имеют вид, хотя:

object Main 

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

test(Main) 
+0

В чем разница между «классом» и «типом» здесь? –

+0

Ну, как я уже сказал, модуль не является классом, в котором вы можете наследовать его. Итак, Main - скорее значение («экземпляр»), чем класс. Main.type дает вам «singleton-type» значения. См. Http://programming-scala.labs.oreilly.com/ch12.html (абзац Singleton Types), также http://blogs.sun.com/sundararajan/entry/mis_understaning_scala_s_singleton –

Смежные вопросы