Код выглядел примерно так?
obj.someMethod(myVar,3,new FooObject() {
public void bar() {
return "baz";
}
});
Если это так, то метод не передается другому методу в качестве аргумента, а создается анонимный внутренний класс , и экземпляр этого класса передается в качестве аргумента.
В приведенном выше примере FooObject
- это абстрактный класс, который не реализует метод bar()
. Вместо создания private class
, расширяющего FooObject
, мы создаем экземпляр абстрактного класса и предоставляем реализацию абстрактного метода в соответствии с остальной частью кода.
Вы не можете создать экземпляр абстрактного класса, поэтому мы должны предоставить отсутствующий метод для создания полного определения класса. Поскольку этот новый класс создается на лету, он не имеет имени, поэтому анонимный . Как определено внутри другого класса, это анонимный внутренний класс.
Это может быть очень удобный ярлык, особенно для Listener
классов, но он может усложнить выполнение кода, если вы увлекаетесь, а определения метода в строке становятся слишком длинными.