• 【juincen】Java中的接口interface类比js中的回调函数


    前几天在左讯飞语音的时候,无意间意识到java中的接口和js中常用的回调函数有点类似,今天在这儿整理一下思路。

    interface,Java中的接口,为什么会有这个东西。

    一,预留声明

    比如两个程序员A和B,A要写一段程序,其中需要调用到B写的程序。这时候A可以写一个接口:

    public interface Demo{
      
      void deal();      
    }
    

    A要调用的方法先“预留声明”在接口里:deal

    然后B去完善这个接口,B写了一个实现类实现了这个Demo接口。

    A在自己的业务逻辑里面只用调用接口的方法就可以了,至于具体怎么实现,不管他,留给B去做。

    二,API

    我在做讯飞语音的时候,有这样一段逻辑,调用讯飞语音的语音识别API。

    其中有个讯飞API的接口类 RecognizerListener,这个接口是需要我来实现的,里面有好几个方法,我需要都实现,然后把这个接口的实例(对象)传给讯飞,

    讯飞识别完成后,调用这个接口里面的方法(回调函数),这时候接口的功能体现出来了。(讯飞并不知道识别完成后,我要干什么事,所以他预留了接口,我实现了给讯飞,他来调用)

    在返回结果的时候,我需要对识别的结果(字符串)进行处理,

    //1.创建SpeechRecognizer对象
    SpeechRecognizer mIat= SpeechRecognizer.createRecognizer( );
    //2.设置听写参数,详见《MSC Reference Manual》SpeechConstant类
    mIat.setParameter(SpeechConstant.DOMAIN, "iat");
    mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
    mIat.setParameter(SpeechConstant.ACCENT, "mandarin ");
    //3.开始听写
    mIat.startListening(mRecoListener);
    //听写监听器
    private RecognizerListener mRecoListener = new RecognizerListener(){
         //接口方法需要实现
    	public void onResult(RecognizerResult results, boolean isLast){
           
           //在这里得到时语音别结果,按照我的业务逻辑来处理结果,每个人写的都不同。这个方法讯飞调用了,我只用实现
      DebugLog.Log("Result:"+results.getResultString ()); } //会话发生错误回调接口 public void onError(SpeechError error) { error.getPlainDescription(true) //获取错误码描述   } //开始录音 public void onBeginOfSpeech() {} //音量值0~30 public void onVolumeChanged(int volume){} //结束录音 public void onEndOfSpeech() {} //扩展用接口 public void onEvent(int eventType,int arg1,int arg2,String msg) {} };

      在开发API的时候常常需要用到接口,给调用者使用,因为你不知道调用者要怎么实现他自己的业务逻辑,那就给他个接口让他自己写去呗!

    js中的回调函数,例如jQuery的ajax,

    $.ajax({
        url:"",
        type:"",
        success:function(){
          //回调函数,这里实现自己的逻辑   
        }
    });
    

      js中直接传一个函数过去,

      java中需要传一个接口对象过去,系统来调用这个接口对象里面的方法。

  • 相关阅读:
    iOS:Core Data 中的简单ORM
    Win8:Snap 实现
    js: 删除node的所有child
    WinJS:Listview item 设置背景透明
    iOS: 消息通信中的Notification&KVO
    win8: 清除iframe的缓存
    What's New in iOS7,iOS7新特性介绍
    "Entity Framework数据插入性能追踪"读后总结
    夜,思考——我想要的到底是什么?
    【查询】—Entity Framework实例详解
  • 原文地址:https://www.cnblogs.com/juincen/p/7874943.html
Copyright © 2020-2023  润新知