Peut-méthodes en java être imbriqués et quel est l'effet?
par exemple, et est-ce légal:
class NAME {
method {
method {}
}
}
et quel serait l'effet? est-il en particulier de la syntaxe impliqués?
- non valide trucs! Je prends le risque de négatif à droit de vote : ce que vous cherchez? juste pour les votes? C'est quoi cette question? qu'essayez-vous de réaliser?
- le compilateur ne me donner la réponse correcte si les compilateurs réponse est oui. J'ai pu l'essayer et il ne pouvait pas travailler, mais la syntaxe est peut-être erroné, je pourrais être dans l'erreur. thered aucun moyen de le savoir.
- Je suis désolé, mais c'est un sens à chipoter. Vous avez demandé si il est légal. Le compilateur réponses que ce soit dans la négative ou l'affirmative.
- voir ma réponse précédente à qui se plaindre. Si je l'ai essayer et le compilateur dit "non", on peut pas dire "non". Il pourrait feather dire "non" ou "vous avez une erreur de syntaxe". La seule condition en vertu de laquelle le compilateur peut me donner une réponse est toujours influencé si il dit oui, et tout fonctionne à la façon dont j'attends qu'il.
- Si le compilateur dit "non", il signifie "non". Si vous avez d'autres erreurs de syntaxe, je vous suggère d'enlever d'abord.
- Non, je ne suis pas 'incapable de comprendre votre point'. Je vous dis que ça n'a pas de sens. Il y a une différence, et de les critiquer sur mon intelligence n'est pas de la faire disparaître. Si vous avez des erreurs de syntaxe, de les supprimer. Si la dernière erreur de syntaxe est de la construction vous sont tests, c'est une erreur de syntaxe. Si il n'y a pas d'erreurs, il n'est pas une erreur de syntaxe.
- droit, mais je ne sais pas, dans ce cas, résistant aux intempéries, l'erreur, le compilateur me donne est due à une erreur de syntaxe ou l'absence d'une fonctionnalité. Envisager mythique de la langue du programme X. si j'essaie d'écrire "int b = 43' et il me donne une erreur alors une des deux choses sont vraies: feather 1) j'ai une erreur de syntaxe ou 2) X n'a pas de prise en compte des variables de type entier. Theres aucun moyen pour moi de savoir à partir de la présence d'une erreur lequel de ces cas est vrai. Donc, si le compilateur dit "non", il peut signifier "non" ou il peut signifier "mauvais".
- Un autre inutile de chipoter. La question que vous avez demandé est une question de syntaxe, de la période. Votre nouvel exemple n'est pas utile. Soit 'int b = 43' est légal de syntaxe ou il ne l'est pas. Si c'est illégal, pourquoi est hors de propos.
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR
Depuis Java 8 méthodes peuvent être imbriquées à l'aide de lambda, voir cette autre question.
Cette réponse est valable pour les versions de Java avant Java 8
Original de la réplique suivre:
Non, ce n'est pas possible.
La chose la plus proche que vous pouvez obtenir est:
Qui est, une deuxième méthode définie dans un intérieur de classe définie dans une méthode.
Vous pouvez déclarer la méthode statique à l'intérieur de l'intérieur de la classe, de sorte que vous n'avez pas à appeler
new
class InnerClass {
Qui n'est pas valide la syntaxe; une telle fonction est prise en charge. (Bien qu'il soit considéré pour Java 7)
Au lieu de cela, vous pouvez utiliser les classes imbriquées, ce qui vous juste posé sur.
Pas.
Une solution est simplement de déclarer les méthodes que vous voulez l'appeler que des méthodes privées en dehors de la "mère" de la méthode-si vous étiez vraiment dérangé, vous pourrait utiliser une convention de nommage pour indiquer qu'ils "appartiennent" à la "mère" de la méthode.
Une autre chose que vous pourriez envisager, et ne semble pas être largement connu parmi les programmeurs, est que vous pouvez déclarer tout arbitraire de la portée du bloc et de l'étiquette, puis utilisez break pour sortir de ce bloc.
Donc la suite est parfaitement légal Java:
Bien sûr, la portée de bloc n'est pas vraiment une méthode, mais dans certains cas, il peut être utilisé pour faire ce que vous voulez une "méthode interne" pour.
Pas. C'est une syntaxe non valide. Et c'est une honte - c'est l'une des choses qui me manque de l'Ada. Ne pas avoir la capacité de définir imbriqués les méthodes n'créer beaucoup de problèmes dans l'organisation de classes avec des quantités substantielles de méthodes privées. À partir de là, c'est une pente glissante en manque de cohésion des terres.
Vous pourriez utiliser des classes imbriquées, mais ils viennent à un prix. Chaque classe imbriquée génère un $classe nommée. Chaque un tribut en termes de descripteurs de fichiers ouverts (si ce n'est tiré à partir d'une archive) et de la mémoire prise par sa définition de classe. Certains systèmes ont un plafond sur le nombre de fichiers (donc le total des classes générées) qu'ils peuvent déployer (Google Apps, par exemple.)
En d'autres termes, je ne voudrais pas utiliser classes imbriquées à imiter imbriquée méthodes (juste au cas où vous décidez d'essayer.)
Maintenant, en supposant que vous pouvez imbriquer des méthodes (comme en Ada), ces méthodes ne seraient visibles au sein de la enfermant méthode (qu'ils seraient plus restreint que ce qui est typique privé méthodes.) Ils seraient en mesure de voir les variables et les paramètres définis dans l'extérieur de la portée (mais probablement seulement si elle est définie comme définitive.)
Il vous permettra d'organiser vos méthodes et algorithmes dans des espaces de noms imbriqués. Lorsque utilisé intelligemment, imbriqués les méthodes de vraiment aider dans l'organisation de votre code.
Sans vérifier, je dirais que ce n'est pas acceptée par le compilateur parce que de ce temps, des méthodes doivent être définies à l'intérieur d'une classe. Toutefois, vous pouvez définir une sous-classe à l'intérieur de la méthode (voir "Locales et les Classes internes Anonymes").
http://java.sun.com/docs/books/tutorial/java/javaOO/innerclasses.html
Pas accepté en Java. On dirait que vous voulez faire de la récursivité, il suffit d'appeler la méthode même de nouveau.