вложенные методы - PullRequest
0 голосов
/ 15 июня 2009

add и GetContentPane являются методами

Имеет ли этот код доступ к методу в методе? Что делает этот код?

frame.getContentPane (). Add (BorderLayout.SOUTH, b);

Ответы [ 4 ]

4 голосов
/ 15 июня 2009

В показанном коде это не «вложенный метод», а метод, который вызывается для объекта, который был возвращен из другого метода. (Просто для вашей информации, на языке программирования Java нет понятия вложенного метода.)

Следующая строка:

f.getContentPane().add(component);

эквивалентно:

Container c = f.getContentPane();
c.add(component);

Вместо того, чтобы разделять два оператора на две строки, первый пример выполняет их в одну строку.

Концептуально, это то, что происходит:

  1. Метод f.getContentPane возвращает Container.
  2. Метод add вызывается для Container, который был возвращен.

Может быть полезно иметь некоторые визуальные эффекты:

f.getContentPane().add(component);
|________________|
        L  returns a Container object.

[Container object].add(component);
|________________________________|
        L  adds "component" to the Container.

Это не слишком отличается от того, как подстановка работает в математике - результат выражения используется для продолжения вычисления выражения:

(8 * 2) + 4
|_____|
   L  8 * 2 = 16. Let's substitute that.

16 + 4
|____|
   L  16 + 4 = 20. Let's substitute that.

20  -- Result.
3 голосов
/ 15 июня 2009

Метод может вернуть объект. И вы можете вызвать метод для этого объекта.

Есть языки, которые поддерживают локальные функции. Но они не видны снаружи.

1 голос
/ 15 июня 2009
public class A {
 public A f1() {
   //Do something.
   return this;
 }
 public A f2() {
   //Do something.
   return this;
 }

Тогда:

A var = new A();
var.f1().f2().f1();
1 голос
/ 15 июня 2009

getContentPane () возвращает контейнер, а метод add является одним из методов класса Container.

Таким образом, выполняя frame.getContentPane (), вы получаете возвращаемый им объект Container, а затем вызываете метод add для этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...