Если я создаю одноэлементный объект Main
без сопутствующего класса, есть ли способ получить класс этого синглтона? classOf[Main]
дает сообщение об ошибке: "not found: type Main".Получение класса для Main в Scala
ответ
Как это экземпляр класса, вы можете использовать метод Main.getClass
, чтобы вытащить этот прочь.
За кулисами JVM знает, что Main
- это экземпляр класса с именем Main$
, и при необходимости его можно получить с помощью методов отражения Java.
Сказав все это, в Scala, как правило, очень мало потребности в отражении, поэтому вам не нужно действительно это делать, если только вы не сразу после интересной теории.
Использование 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
Спасибо. Ваше решение сработало. – Ralph
Объекты Singleton, также называемые модулями, не имеют «класса», поскольку вы не можете наследовать их. Подумайте о синглетоне и классе как о противоположных понятиях.
Они имеют вид, хотя:
object Main
def test(a: Main.type): Unit = println("Got: " + a)
test(Main)
В чем разница между «классом» и «типом» здесь? –
Ну, как я уже сказал, модуль не является классом, в котором вы можете наследовать его. Итак, 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 –
- 1. Получение типа реализующего класса Scala
- 2. Scala: Получение чистого имени класса
- 3. Scala: получение имени класса черта смешивается в
- 4. Вызов класса в Main()
- 5. Scala Получение типа класса из строкового представления
- 6. Вызов класса Main()? Как?
- 7. Получение «main» java.lang.UnsupportedOperationException
- 8. Получение реализованного типа для класса Scala с использованием макросов
- 9. класс не может иметь main() в scala?
- 10. Параметры передачи для класса Flash Main (Document)
- 11. Отражение класса класса Scala
- 12. Получение полной информации о полях класса дела в Scala
- 13. Идентификатор класса в Scala
- 14. Псевдоним класса в scala
- 15. Sealed класса в Scala
- 16. Получение класса Java от Scala TypeTag в макросах
- 17. Получение программы scala для запуска в eclipse
- 18. Получение Swagger для работы в Play2 Scala
- 19. scala sbt assembly "no main manifest attribute"
- 20. Серийная реализация класса Scala
- 21. C++ Декларация класса после main?
- 22. Получение ошибки: Исключение в теме «main» org.springframework.beans.factory.NoSuchBeanDefinitionException
- 23. Получение ошибки Исключение в потоке «main» java.lang.NoClassDefFoundError:
- 24. Заполнитель для класса корпуса? Scala для понимания
- 25. Получение WeakTypeTag для заданного типа в аннотации макроса Scala
- 26. == для класса case и класса «non-case» в Scala
- 27. Получение функций сравнения в Scala
- 28. Необходимость для «main» (java)
- 29. Использование класса с int в main()
- 30. Включить контейнер из main() в методе класса
Если вы хотите использовать это, чтобы запустить программу с основным методом, который является частью объекта-компаньона для класса с тем же именем, он не будет работать. У Scala только специальная обработка основного метода для объектов, которые не являются компаньонами, по любой причине. – Madoc
@Madoc: Я думал, что исправлено в 2.8.0. В любом случае, я все еще создаю объект 'Main' без компаньона. Обычно он просто содержит метод «main». – Ralph