2014-09-21 2 views
1

Je me sens curieuse. En Java, est-il possible d'imbriquer une méthode nouvellement créée dans une méthode? Je pose cette question car dans mon livre il y a ces exercices pratiques pour chaque section (je suis actuellement sur Objets/Classes) et il y a une question qui vous dit d'appeler une méthode booléenne comme vraie si une autre méthode - dans la même classe - était appelée (dans la classe appelée la variable booléenne devient vraie). Voici un exemple:Appel d'une méthode si une autre méthode est appelée

public void setTrue(int someRandomStuff) { 
    this.someRandomStuff = superRandomStuff; 
    // this is where the boolean variable comes into play 
    trueOrFalse = true; 
} 

Maintenant, je me demandais est-il possible de mettre une autre méthode à l'intérieur de cette méthode qui appelle si de la trueOrFalse 'définit la méthode de setTrue true? Ou devrais-je créer une autre méthode entièrement? Je ne fais que l'essayer de cette façon parce que je n'ai pas vraiment lu quelque chose qui disait que ce n'était pas possible. Je l'ai essayé comme ça et IntelliJ ne montre pas vraiment si c'est faux, donc je vais supposer que ce doit être possible.

Voici ce que j'ai essayé pour obtenir des précisions sur ce que je veux dire:

public void setTrue(int someRandomStuff) { 
    this.someRandomStuff = superRandomStuff; 
    trueOrFalse = true; 
    if (trueOrFalse) { 
    public boolean getTrueOrFalse() { 
    return true; 
    } 
} 

J'essaie honnêtement de savoir pourquoi et comment les choses fonctionnent comme ils le font, plutôt que de simplement le faire parce que quelqu'un/quelque chose me dit que c'est ainsi et qu'il le sera toujours.

Si vous êtes curieux au sujet de la mise en forme ou si vous voulez des exercices similaires à ce livre est appelé: Introduction to Java, Comprehensive Version (9th Edition).

+0

Votre code est sans indentations faisant tout justifié à gauche et ce qui rend difficile à lire, comprendre et débogage. J'ai re-formaté votre code posté en lui donnant des indentations cohérentes, et en m'assurant que tout le code sur le même bloc est sur le même niveau d'indentation. Dans le futur, vous aurez envie de le faire vous-même. Votre coopération dans ce domaine sera grandement appréciée et améliorera probablement vos chances d'obtenir une réponse décente et rapide. –

+0

Pourquoi ne pas passer votre méthode avec un param? – shinjw

+0

@HovercraftFullOfEels Désolé, l'interface est un peu difficile à utiliser sur une tablette; le texte en surbrillance invite les fonctionnalités de mon iPad. shinjw Qu'entendez-vous par là? Ne comprenant pas entièrement ce que vous essayez d'obtenir, veuillez clarifier. –

Répondre

0

Vous ne pouvez pas imbriquer vos méthodes de cette manière. A en juger par votre code, il semble que vous vouliez définir une variable de classe. Définissez votre variable Méthode true et variable de classe comme true

boolean isMethodCalled = false; 

public void doMethod(int someRandomStuff) { 
    this.someRandomStuff = superRandomStuff; 
    isMethodCalled = true; 
} 

Vous pouvez ensuite définir une autre méthode qui retourne votre variable classe trueOrFalse

public boolean getIsMethodCalled() { 
    return isMethodCalled; 
} 

Cela rendra isMethodCalled vrai quand doMethod est appelé. Sinon isMethodCalled retournera false.

+0

Hmm Je ne suis pas sûr si c'est ce qui est demandé dans le problème dans le livre. Je voudrais juste regarder les réponses, Liang (l'auteur du livre) n'a pas de réponses à cette section particulière sur sa version texte en ligne du livre. La question vous demande de créer une méthode qui renvoie true si une autre méthode a été appelée. L'avantage à cela est, dans la méthode - qui a été appelée - il définit votre variable booléenne à true. Donc, ceux-ci sont censés être deux méthodes indépendantes. C'est ce que je ne comprends pas et pourquoi j'ai posé cette question. –

+0

Vous aurez besoin de configurer des variables de classe pour que cela se produise. – shinjw

+0

Oh, j'ai vu votre montage après avoir rafraîchi la page et c'est très proche de ce que je vais demander ensuite - dans mon édition. La variable 'methodTrueOrFalse' n'avez-vous pas dû déclarer son type, ou est-ce juste omis? –

0

Non, vous ne pouvez pas avoir une définition de méthode dans une autre méthode, les méthodes doivent être définies séparément dans votre classe, que le code ne compilera pas

0

Non, vous ne pouvez pas imbriquer les méthodes les unes avec les autres, vous devez les lister toutes dans une classe. Vous pouvez toutefois appeler une méthode d'une autre méthode dans la même classe. Vous l'avez fait plusieurs fois, je suppose. Donc, cela ressemblerait à:

public class Something { 
    public void methodOne() { 
     // does something 
    } 

    public int methodTwo() { 
     // does somethingElse 
    } 

    public void methodThree() { 
     int variable = methodTwo(); 
    } 
} 
0

La méthode d'imbrication dans Java n'est pas autorisée. Cela donnera l'erreur de compilation. Si votre exigence nécessite l'appel d'une autre méthode à partir d'une méthode, vous pouvez déclarer vos méthodes dans la même classe que private et les appeler.

public class MethodNesting { 
    public void method() { 
     myinnerMethod(); 
    } 

    private void myinnerMethod() { 
     // Do Something 
    } 
} 

Et si vous êtes curieux de savoir plus jeter un oeil à ce

Can methods in java be nested and what is the effect?

Questions connexes