Comment accéder à java les classes par défaut dans le package?
Je travaille maintenant de concert avec les autres dans un grain de projet. J'ai à écrire du Java-classes. Mais j'ai besoin d'accéder à un consultable objet créé avec groovy. Il semble que cet objet doit être placé par défaut dans le package.
Ma question est: Est-il un moyen d'accéder à cet objet par défaut dans le package à partir d'un Java de la classe dans un package?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser classes dans le package par défaut à partir d'un paquet nommé.
(Techniquement vous pouvez, comme indiqué dans Sharique Abdullah est réponse par la réflexion de l'API, mais classes à partir de la sans nom d'espace de noms sont pas dans le champ d'application dans un déclaration d'importation)
Avant J2SE 1.4 vous pouvez importer les classes du package par défaut à l'aide d'une syntaxe comme celle-ci:
C'est n'est plus autorisé. Donc, pour accéder à un paquet par défaut de la classe de l'intérieur un emballés classe nécessite de déplacer le package par défaut de la classe dans un package de sa propre.
Si vous avez accès au code source généré par groovy, certains de post-traitement est nécessaire pour déplacer le fichier dans un kit dédié, et ajouter ce "package" directive au début de son.
Mise à jour de 2014: bug 6975015, pour JDK7 et JDK8, décrire un même plus strictes interdiction de l'importation de sans nom de package.
Andreas souligne dans les commentaires:
com
ouorg
? Peut-être laissez-nous interdire de les importer de trop?org
sont basées sur un nommage convention, par opposition à la "root
" emballage, qui est la partie de la spécification du langage. Vous devez faire confiance à des conventions, mais la langue peut évoluer son cahier des charges.En fait, vous le pouvez.
En utilisant les reflets de l'API, vous pouvez accéder à toute la classe jusqu'à présent. Au moins j'ai pu 🙂
val bar = "hi"; val fooClass = Class.forName("FooClass"); val fooMethod = fooClass.getMethod("foo", classOf[Array[String]]); val fooReturned = fooMethod.invoke(fooClass.newInstance(), Array(bar));
Class.forName("FooBar").newInstance().fooMethod("I did it")
Utilisation jarjar recompresser le fichier jar avec la règle suivante:
Toutes les classes dans le package par défaut de la source jar fichier, la cible, les colis, sont donc en mesure d'accéder.
Vous pouvez utiliser des packages dans le
Groovy
code, et tout fonctionne très bien.Cela peut signifier une réorganisation mineure de code sous
grails-app
et un peu de douleur au début, mais sur un gros grain de projet, qu'il vient de faire sens pour organiser les choses dans les packages. Nous utilisons la norme Java package convention de nommagecom.foo.<app>.<package>
.Avoir tout dans le package par défaut devient une entrave à l'intégration, comme vous allez le trouver.
Contrôleurs semble être le Graal de l'artefact (ou artefact) qui résiste à être mis dans un package Java. Probablement que je n'en ai pas compris la
Convention
pour encore. 😉