Могу ли я иметь интерфейс в методе? - PullRequest
1 голос
/ 24 декабря 2009

Я знаю, что это может иметь объявление класса в методе класса. Например. Мы можем иметь анонимное объявление класса для обработки событий в теле метода.

Но я хочу знать, таким же образом я могу иметь объявление интерфейса в методе в классе.

Какая польза от этого?

Ответы [ 4 ]

1 голос
/ 24 декабря 2009

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

Предположим, интерфейс может быть объявлен внутри метода, он не будет доступен снаружи. Трудно представить себе полезность такого интерфейса, заключенного в блок. С другой стороны, локальный класс может быть полезен, поскольку он содержит конкретную реализацию.

1 голос
/ 24 декабря 2009

Я не думаю, что вы можете объявить интерфейс внутри метода. Почему ты хочешь? Вы можете определить только анонимный внутренний класс.

1 голос
/ 24 декабря 2009

Я предполагаю, что вы хотите вернуть интерфейс для метода?

Краткий ответ: Да.

Почему?

Вот хороший пост.
Почему мы возвращаем тип Mostly Interface, а не Class?

Выдержка:

Преимущество в том, что возвращение интерфейс позволяет изменить реализация позже. Например, вы может через некоторое время решить, что вы гораздо лучше использовать LinkedList вместо ArrayList .....

0 голосов
/ 24 декабря 2009

Вы можете сделать это, хорошо известным примером является интерфейс Comparator<T>.

Например:

List<Person> persons = personDAO.list();

Collections.sort(persons, new Comparator<Person>() { 
    // Anonymous inner class which implements Comparator interface.
    public int compare(Person one, Person other) {
        return one.getName().compareTo(other.getName());
    }
});

Некоторые могут возразить против этого и сказать, что он скорее принадлежит к классу Person, поэтому вам не нужно реализовывать его снова и снова, когда это необходимо. Э.Г.

public class Person {

    // ...

    public static final Comparator<Person> ORDER_BY_NAME = new Comparator<Person>() {
        public int compare(Person one, Person other) {
            return one.getName().compareTo(other.getName());
        }
    };
}

, который можно использовать следующим образом:

Collections.sort(persons, Person.ORDER_BY_NAME);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...