Определение класса внутри аргумента метода в Java? - PullRequest
11 голосов
/ 03 марта 2011

Я впервые столкнулся с кодом Java в этой форме:

object.methodA(new ISomeName() {
public void someMethod() {
//some code
}
});

Где ISomeName - это интерфейс, в котором есть один метод с такой же сигнатурой, что и у someMethod () выше.

Из того, что я могу понять, мы определяем новый класс имен, который реализует ISomeName, создавая объект этого класса с помощью конструктора по умолчанию и передавая объект в качестве аргумента методу A.

Это правильно?

Как называется эта функция?

Ответы [ 4 ]

4 голосов
/ 03 марта 2011

Создается анонимный класс .

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

final String name = getName();

Thread t = new Thread(new Runnable() {
    @Override public void run() {
        System.out.println(name);
    }
});
t.start();

Значения переменных передаются в конструктор анонимного класса.Это слабая форма замыканий (слабая из-за ограничений: копируются только значения, поэтому переменная должна быть конечной).

1 голос
/ 03 марта 2011

Эта функция называется анонимные классы .

1 голос
/ 03 марта 2011

Это называется Anonymous Class (ссылка в формате PDF).

1 голос
/ 03 марта 2011

это называется анонимными классами в Java.Это означает, что вы создаете анонимный класс, который реализует интерфейс ISomeName и передается в качестве аргумента методу A.

...