Какую выгоду предоставляют локальные классы метода в Java? - PullRequest
8 голосов
/ 04 апреля 2011

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

IУ меня всегда было впечатление, что методы должны быть настолько малы и конкретны для их задачи, насколько это возможно ( Ортогональность IIRC), поэтому введение даже самого простого внутреннего класса создало бы громоздкие и громоздкие методы.1008 * Кто-нибудь может предложить хорошее практическое использование для локальных внутренних классов метода?Пока мне кажется, что мне, возможно, придется понимать их исключительно для сдачи экзамена, а не для повседневного кодирования.

Приветствия

Ответы [ 6 ]

12 голосов
/ 04 апреля 2011

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

Но есть одна вещь, которую могут делать именованные классы, и анонимные классы могутt: реализация более чем одного интерфейса или расширение класса и интерфейсов тоже.Также вы можете создать более одного объекта этого класса (без использования цикла).

4 голосов
/ 04 апреля 2011

Я бы сказал, что лучшая инкапсуляция - это выгода.

2 голосов
/ 04 апреля 2011

Метод локальных внутренних классов полезен, когда вы пытаетесь выполнять «функциональные» операции или передавать код другому объекту для последующего вызова.В большинстве случаев такие классы вызываются или используются только один раз, поэтому нет необходимости определять их где-то еще и заставлять читателя искать его.Будущие версии Java, скорее всего, заменят большинство сценариев использования для этих типов внутренних классов «замыканиями».

Типичные случаи - когда вы пишете прослушиватель событий, который вызывает какой-то другой метод, или запускаете новый поток.1003 *

1 голос
/ 04 апреля 2011

Локальные классы позволяют извлекать логику из родительского класса и объективировать ее. Это удаляет функциональность там, где она не принадлежит, и помещает ее в свой собственный класс. Но что, если этот новый объект нужен только на короткое время, только на время одного блока кода? Вот где подходит местный класс.

0 голосов
/ 17 июля 2018

Локальные классы (метод локальных внутренних классов) используются редко.Это может быть полезно, когда внутри метода требуется какая-либо повторяющаяся функциональность, и если мы НЕ заинтересованы в создании метода уровня класса (например, из-за того, что эта функциональность нам может не потребоваться вне метода), допустим, что методы sum & mul неоднократно требуютсяв нашем коде (любом конкретном методе), один способ создать методы уровня класса и вызывать их всякий раз, когда это необходимо, но что, если эти методы больше не требуются вне этого метода, в этом случае мы можем подумать о создании локального внутреннего класса и доступ к егометод суммы, когда требуется только в этом методе, ниже пример

class Outer {
    public void calculations() { 
        class Inner {
            public int sum(int x, int y) {
                System.out.println("sum : " + (x+y));
                return x+y;
            }
            public int mul(int x, int y) {
                System.out.println("multiplication : " + (x*y));
                return x*y;
            }
        }
        Inner i= new Inner();
//some code...
        i.sum(10, 20);
//some code...etc
        i.mul(30, 40);
        i.mul(14, 12);
        i.sum(10000, 20000);
//some other code...
    }
}
public class TestClass {
    public static void main(String[] args) {
        new Outer().calculations();
    }
}
0 голосов
/ 04 апреля 2011

Я думаю о реализации Runnable, переданной в Thread:

Thread t = new Thread(new Runnable() {
   void run() {
      ...
    }
});

Это анонимный класс, и любой анонимный класс также является внутренним.

...