2014-09-21 3 views
1

Мне любопытно. В Java возможно вставить вновь созданный метод внутри метода? Я спрашиваю об этом, потому что в моей книге есть эти упражнения для каждого раздела (в настоящее время я на Object/Classes), и возникает вопрос, который говорит вам вызывать логический метод как true, если был вызван другой метод - в том же классе (в классе, который называется логической переменной, становится истинным). Вот пример:Вызов метода, если вызван другой метод

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

Теперь мне было интересно, можно ли поставить другой метод внутри этого метода, который вызывает, если метод setTrue устанавливает «trueOrFalse» истина? Или мне нужно было бы создать еще один метод? Я только пытаюсь это сделать, потому что я не читал ничего, что говорило, что это невозможно. Я пробовал это так, и IntelliJ на самом деле не показывает, что это неправильно, поэтому я предполагаю, что это должно быть возможно.

Вот что я пытался дать дополнительные разъяснения о том, что я имею в виду:

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

Я честно пытался узнать, почему и как вещи работают так, как они это делают, а не просто делать это, потому что кто-то/что-то говорит мне, что так оно и есть и будет всегда.

Если вам интересно о форматировании или хотите упражнения похожи на это книга называется: Introduction to Java, Comprehensive Version (9th Edition).

+0

Ваш код был без каких-либо углублений делая все это выравнивается по левому краю и делает его трудно читать, понимать и отлаживать. Я переформатировал ваш опубликованный код, предоставив ему согласованные отступы и убедившись, что весь код на одном блоке находится на одном уровне отступов. В будущем вы захотите сделать это сами. Ваше сотрудничество в этом будет высоко оценено и, скорее всего, улучшит ваши шансы получить достойный и быстрый ответ. –

+0

Почему бы вам не передать свой метод с параметром? – shinjw

+0

@HovercraftFullOfEels К сожалению, интерфейс немного сложно использовать на планшете; выделенный текст подсказывает мои функции iPads. shinjw Что вы подразумеваете под этим? Не полностью понимая, к чему вы пытаетесь добраться, пожалуйста, уточните. –

ответ

0

Вы не можете вложить свои методы таким образом. Судя по вашему коду, похоже, вы хотите установить переменную класса. Установить переменный метод как true и переменный класс, как true

boolean isMethodCalled = false; 

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

Вы можете определить другой метод, который возвращает свой класс trueOrFalse переменной

public boolean getIsMethodCalled() { 
    return isMethodCalled; 
} 

Это сделает isMethodCalled верно, когда DoMethod называется. В противном случае isMethodCalled вернет false.

+0

Хмм я не уверен, что это то, что задают в проблеме в книге. Я бы просто посмотрел на ответы, Лян (автор книги) не имеет ответов на этот конкретный раздел в своей онлайн-текстовой версии книги. В этом вопросе предлагается создать метод, возвращающий true, если был вызван другой метод. Перк к этому, в методе - который был вызван - он устанавливает вашу логическую переменную в true. Таким образом, это должны быть два независимых метода. Это то, чего я не получаю, и почему я задал этот вопрос. –

+0

Вам нужно будет настроить переменные класса, чтобы это произошло. – shinjw

+0

О, только что увидело ваше редактирование после обновления страницы, и это очень близко к тому, что я буду спрашивать дальше - в моем редактировании. Переменная 'methodTrueOrFalse' вам не нужно было объявлять ее тип, или это просто опущено? –

0

Нет, вы не можете иметь определение метода внутри другого метода, методы должны быть определены отдельно в своем классе, что код не будет компилироваться

0

Нет, вы не встраиваете методы друг в друга, вы перечисляете их все в классе. Однако вы можете вызвать один метод из другого метода как внутри одного класса. Полагаю, вы делали это много раз. Так было бы выглядеть так:

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

    public int methodTwo() { 
     // does somethingElse 
    } 

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

Метод вложенности в java не допускается. Это даст ошибку компиляции. Если ваше требование требует вызова другого метода из одного метода, вы можете объявить свои методы в том же классе, что и private, и вызвать их.

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

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

И если вам интересно узнать больше, посмотрите на эту

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

Смежные вопросы