1. Introdução
Em muitas linguagens de programação, o conceito de retorno de chamada de função está presente. Existem ponteiros de função em C e C ++, portanto, as funções podem ser passadas como parâmetros para outras funções para a chamada posterior. No JavaScript, os retornos de chamada da função são trazidos ao extremo. O manuseio de vários eventos, especialmente eventos assíncronos, é basicamente concluído por retornos de chamada de função.
Em Java, os retornos de chamada de função também podem ser implementados. Embora não haja ponteiro de função, o Java pode obter um método de classe através de um mecanismo de reflexão, transmiti -lo a outras funções como um parâmetro do tipo java.lang.reflect.method e depois chamar a função através do método de invasão do objeto do método.
No entanto, as etapas de chamadas dessa maneira são relativamente pesadas, ineficientes na execução e difíceis de depurar. Em Java, existe um mecanismo mais elegante que os retornos de chamada da função, ou seja, interfaces.
2. Por que os retornos de chamada da função precisam
Os retornos de chamada da função são na verdade uma maneira de adiar a implementação de certas funções.
Se soubermos antecipadamente quais operações o programa deve executar, não há necessidade de retornos de chamada de função e pode ser implementado diretamente durante a programação.
Mas muitas vezes, ao escrever código, especialmente ao escrever classes de ferramentas, bibliotecas ou estruturas de funções, funções relativamente gerais e abstratas são implementadas, enquanto as funções em cenários específicos são implementados pelos desenvolvedores usando essas classes.
Os retornos de chamada da função podem resolver essa situação em que você não conhece a implementação específica com antecedência.
Exemplos de funções de classificação
Por exemplo, quando queremos implementar uma função de classificação geral, não sabemos com antecedência quais tipos de elementos outros desenvolvedores usarão para classificar e não sabemos quais padrões julgar o relacionamento de ordem parcial (tamanho) desses elementos.
Portanto, outros desenvolvedores podem ser necessários para fornecer uma função de comparação ao usar funções de classificação, para que possamos usar comparar para comparar o tamanho dos elementos a serem classificados sem saber antecipadamente o tipo de elementos, nem a implementação específica da comparação.
Aqui, a função de comparação é uma função de retorno de chamada para a função de classificação.
O pseudo-código é representado da seguinte maneira:
// A função Geral Função void Sort (Object [] Array, Método Compare) {// Use a função de comparação para comparar o tamanho do relacionamento dos elementos na matriz // classificar a matriz} // A função de comparação específica é implementada pelo chamador int compare (objeto a, objeto b) {// Compare os elementos A e B e retornam o tamanho}Exemplo de funções de processamento assíncrono
Por exemplo, quando escrevemos uma função de processamento assíncrono, não sabemos com antecedência o que outros desenvolvedores devem fazer quando o processamento for concluído, porque essas operações só podem ser conhecidas ao usar a função em um cenário específico.
Portanto, os desenvolvedores podem ser obrigados a fornecer um retorno de chamada para a função de retorno ao usar essa função. Dessa forma, quando escrevemos funções de processamento assíncrono, podemos chamar a função de retorno de chamada para executar algum trabalho final sem saber o que esse trabalho final é com antecedência.
O pseudo-código é representado da seguinte maneira:
// Função de processamento assíncrono void assíncrono (retorno de chamada do método) {// Execute o retorno de chamada de tarefa assíncrona ();} // A função de retorno de chamada específica void de retorno () é implementada pelo chamador {// operações a serem executadas após o término do processamento assíncrono}}3. Use interface em vez de retorno de chamada de função
Mencionamos acima que o motivo pelo qual o retorno de chamada da função é usado é porque não conhecemos a implementação específica de determinadas funções com antecedência; portanto, a implementação específica é deixada para que outros desenvolvedores sejam concluídos.
Você acha que essa frase parece descrever a interface Java? Uma interface é uma definição abstrata de um conjunto de métodos, e a implementação específica é concluída pela classe que implementa a interface.
Portanto, o uso das duas características de retornos de chamada orientados a objetos e orientados para a interface pode ser substituído.
Damos os dois exemplos acima para ilustrar como uma interface substitui um retorno de chamada de função.
Funções de classificação
Usando uma interface para implementar a função de classificação, não exige mais que os desenvolvedores forneçam a função de retorno de chamada compare ao usar a função de classificação, mas exige que os desenvolvedores garantam que os elementos sejam classificados implemente a interface comparável. Com base na premissa de que "os elementos a serem classificados já implementaram a interface comparável", podemos implementar a função de classificação sem conhecer o tipo de elementos a serem classificados.
// Função geral da função void Sort (Object [] Array) {// Use o método comparável da interface compareto // compare o tamanho dos elementos para classificar a matriz. } // Interface definida pela função de classificação interface pública comparável {public int compareto (objeto outro);} // Implementar interface comparável classe pública elemento implementa comparável {@Override public int compare (objeto outro) {// julga o relacionamento atual entre elemento e outro // e retornar o relacionamento entre os dois}}}}}Funções de processamento assíncronas
Ao usar interfaces para implementar funções de processamento assíncrono, o desenvolvedor não requer o retorno de chamada da função de chamada, mas requer um objeto que implementa a interface especificada, que reflete bem a idéia orientada a objetos Java. Comparado ao fornecimento de uma função, um objeto contém mais informações e é mais flexível de usar. Mas essencialmente, essa função de processamento assíncrona ainda usa a interface para concluir o trabalho de acabamento.
// Função de processamento assíncrono void assyprocess (ActionListener al) {// Executa tarefas assíncronas al.actionPerformed ();} // interface definida por processamento assíncrono de processamento @roubled interface ACtionListener {void actionFormed ();} // implementListReMeMeReMeReMeReMeRMErMeMeRMErMErMeReMent (Void actionPerformed ();} // implement -listener interface interface interface (Void ActionPerformed ();} // implementsListErMeReMeReTeMeReTeMeMeReTerMeReMeReMent (Void ActionPerformEd (); {// Trabalho extra necessário quando a função de processamento assíncrona é concluída}} // chamando a função de processamento assíncrono public estático void main (string [] args) {AsynProcess (new ExtraTask ());}4. Resumo
O método de retorno de chamada pode ser resumido como: Implementando uma função geral func. Ao chamar essa função geral em um cenário específico, o chamador precisa fornecer um retorno de chamada de retorno de chamada adequado. A função geral Func usa essa função de retorno de chamada para concluir tarefas em cenários específicos.
A maneira de implementar a interface é: implementar uma função geral func. Ao chamar essa função geral em um cenário específico, o objeto que está sendo operado precisa implementar a interface apropriada por si só. A função geral usará essa interface para concluir as tarefas no cenário específico.
O uso de retornos de chamada ou interfaces de função pode resolver a situação em que você não conhece a implementação específica com antecedência. O método de retorno de chamada da função passa uma função, enquanto o método da interface passa um objeto que implementa a interface.
Em Java, os retornos de chamada de função precisam ser concluídos usando mecanismos de reflexão, que são propensos a erros e são ineficientes. O uso de interfaces pode tornar a lógica do código mais clara, mais eficiente e mais fácil de depurar.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.