Si je crée un objet singleton Main
sans classe de compagnon, est-il possible d'obtenir la classe de ce singleton? classOf[Main]
donne une erreur: "introuvable: tapez Main".Obtenir la classe pour Main dans Scala
Répondre
Comme il est une instance d'une classe, vous pouvez utiliser la méthode Main.getClass
pour tirer celui-ci hors tension. En arrière-plan, la JVM sait que Main
est une instance d'une classe nommée Main$
, accessible par des méthodes de réflexion Java si nécessaire. Ayant dit tout cela, il y a généralement très peu de besoin de réflexion dans Scala, donc vous ne devriez pas en avoir vraiment besoin, sauf si vous êtes juste après un peu de théorie intéressante.
Cas d'utilisation: 'val buildNumber = try { new Manifest (nouvelle URL ("jar:" + classOf [principal] .getProtectionDomain.getCodeSource.getLocation + "! /META-INF/MANIFEST.MF"). openStream) .getMainAttributes.getValue ("Build-Number")} catch {case _: ZipException => "0"} ' – Ralph
Merci. Votre solution a fonctionné. – Ralph
Les objets singleton, alias modules, n'ont pas de "classe" car vous ne pouvez pas en hériter. Pensez singleton et classe comme des notions opposées.
Ils ont un type bien:
object Main
def test(a: Main.type): Unit = println("Got: " + a)
test(Main)
Quelle est la différence entre "classe" et "type" ici? –
Eh bien, comme je l'ai dit, un module n'est pas une classe en ce sens que vous pouvez en hériter. Donc Main est plutôt une valeur ("instance") qu'une classe. Main.type vous donne le "singleton-type" d'une valeur. Voir http://programming-scala.labs.oreilly.com/ch12.html (paragraphe Singleton Types), aussi http://blogs.sun.com/sundararajan/entry/mis_understaning_scala_s_singleton –
- 1. Appeler une classe dans Main()
- 2. Comment utiliser classe StdLexical dans Scala
- 3. Protéger la classe de l'instanciation avant main()
- 4. Irrégularités dans la hiérarchie de classe Scala
- 5. boussole main dans la main avec wordpress
- 6. `référence non définie à` main` dans la classe Cpp sans main()
- 7. Réutilisation de la classe dans le fichier avec main()
- 8. À quoi sert "string [] args" dans la classe Main?
- 9. main (String args []) déjà défini dans la classe
- 10. comment obtenir l'annotation d'un champ de classe scala
- 11. Scala 2.8: comment initialiser la classe enfant
- 12. Scala: finale statique publique dans une classe
- 13. Héritage de classe Scala
- 14. Pourquoi la méthode main() ne requiert-elle pas '=' dans sa définition dans Scala?
- 15. Comment obtenir Eclipse pour créer bin/main et bin/test
- 16. Comment obtenir la sémantique de Ponter/Reference dans Scala
- 17. exécuter la configuration pour scala en éclipse
- 18. Scala, l'importation classe
- 19. Comment créer une classe de main pour BlackJack java
- 20. modèle Scala correspondant dans la construction pour
- 21. C++ classe pourquoi besoin de main?
- 22. scala non-correspondance de cas pour la classe de cas
- 23. Objet Scala qui étend la classe Java
- 24. Macros Scala: la construction d'une classe anonyme
- 25. Caractère imbriqué dans le constructeur de la classe dans scala
- 26. classe Scala étend {}
- 27. Scala Obtenir le type de classe de représentation de chaîne
- 28. Afficher la classe Main() en cours d'appel? Comment?
- 29. Comment "surcharger" une classe interne dans Scala?
- 30. Scala obtenant la classe d'un paramètre
Si vous voulez l'utiliser pour démarrer un programme avec une méthode principale faisant partie d'un objet compagnon pour une classe portant le même nom, cela ne fonctionnera pas. Scala a seulement la manipulation spéciale de la méthode principale pour les objets qui ne sont pas des compagnons, pour une raison quelconque. – Madoc
@Madoc: Je pensais que c'était corrigé en 2.8.0. Dans tous les cas, je crée toujours un objet 'Main' sans compagnon. Il ne contient généralement que la méthode 'main'. – Ralph