English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Анализ использования анонимных внутренних классов и вызовов функций в Android

Этот пример рассказывает о использовании анонимных внутренних классов и функций обратного вызова в программировании Android. Поделюсь с вами, чтобы вы могли использовать его в качестве справки, подробности такие:

В разработке Android мы часто используем анонимные внутренние классы и их функции обратного вызова, например, когда мы устанавливаем слушатель для Button, мы обычно реализуем интерфейс OnCLickListener и перезаписываем метод Onclick(), это и есть анонимный внутренний класс и функция обратного вызова, так что как много вы понимаете о анонимных внутренних классах и функциях обратного вызова Java? Эта документация предоставляет более детальное объяснение.

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

A. О функции обратного вызова

Anonymous inner class использует функцию обратного вызова, что такое функция обратного вызова?

Термин обратный вызов означает, что клиентское приложение C вызывает функцию A в служебной программе S, а затем S в какое-то время обратно вызывает функцию B в C, для C эта B называется функцией обратного вызова. Например, функция процесса окна в Win32 - это типичный пример функции обратного вызова. Обычно C не вызывает B himself, цель предоставления B C - это чтобы S вызывал его, и это необходимо для C. Поскольку S не знает, кто такой B, предоставленный C, S соглашается с интерфейсом спецификации B (prototype функции), а затем C заранее через функцию R S информирует S о том, что он будет использовать функцию B, этот процесс называется регистрацией функции обратного вызова, R называется функцией регистрации. Web Service и RMI Java используют механизм обратного вызова, чтобы обращаться к удаленным серверным программам. Ниже приведен пример:

Программист A написал программу (программу a), в которой был оставлен интерфейс обратного вызова и программа была хорошо封装ена. Программист B хочет, чтобы a вызывал метод своей программы b, поэтому он использует интерфейс a для обратного вызова метода из b. Цель достигнута. В C/C++ для использования обратного вызова функция должна передать адрес своего указателя вызывателю, но в Java нет указателей, что делать? Мы можем реализовать определение обратного вызова через интерфейс (interface).

Предположим, что я программист A, вот моя программа a:

public class Caller
{
  public MyCallInterface mc;
  public void setCallfuc(MyCallInterface mc)
  {
    this.mc= mc;
  {}
  public void call(){
    this.mc.method();
  {}
{}

Мне нужно определить интерфейс, чтобы программист B мог написать программу, реализующую этот интерфейс, в соответствии с моими определениями.

public interface MyCallInterface
{
  public void method();
{}

Таким образом, программист B может реализовать этот интерфейс, чтобы достичь цели обратного вызова:

public class B implements MyCallInterface
{
  public void method()
  {
    System.out.println("回调");
  {}
  public static void main(String args[])
  {
    Caller call = new Caller();
    call.setCallfuc(new B());
    call.call();
  {}
{}

B. О анонимных внутренних классах

Чтобы понять, что такое внутренний класс, его функции, полиморфизм Java и что такое функциональный回调, есть множество детальных объяснений в Интернете. Для простоты sake, я просто сделал краткое объяснение. Анонимные внутренние классы передаются в качестве параметра методу, в котором используется тип интерфейса для приема переданного анонимного класса, затем вызывается его метод, что и есть полиморфизм. Принцип 其实 реализует обратный вызов, так как он вызывает метод вашего анонимного внутреннего класса. Ниже приведен код, который был написан вручную и не протестирован, только для демонстрации.

interface InterfaceA{
   String go();
{}
class Test(){}
   public void prtGo(InterfaceA ia){
     System.out.println(ia.o());
   {}
  public static void main(String []args){
     Test t = new Test();
     t.prtGo(new InterfaceA(){
       public String go(){
         return"go";
       {}
     });
   {}
{}

Читатели, которые интересуются дополнительной информацией о Android, могут ознакомиться с нашими专题ами: «Введение в разработку Android и продвинутые руководства», «Советы по отладке и решения часто встречающихся проблем в Android», «Обзор技巧 по работе с мультимедийными данными (аудио, видео, запись и т.д.) в Android», «Обзор использования основных компонентов Android», «Обзор技巧 по работе с Android View View», «Обзор技巧 по работе с Android layout layout» и «Обзор использования Android View Control»

Надеюсь, что информация, изложенная в этой статье, поможет вам в разработке Android-приложений.

Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, автоматически загружен и загружен, сайт не имеет права собственности, не прошел редактирование, не несет ответственности за соответствующие юридические последствия. Если вы обнаружите спорное содержание авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения и предоставления соответствующих доказательств. При обнаружении правонарушения сайт немедленно удаляет спорное содержимое.

Основной учебник
Рекомендуем также