最近在看React-native,对内部实现很感兴趣,自己写了Module注册进去,并且在js中调用,很好奇自己的方法是怎么暴露给js的,看了BaseJavaModule的源码,里面有方法是如何暴露的。
@Override publicfinalMap<String,NativeMethod>getMethods(){ Map<String,NativeMethod>methods=newHashMap<String,NativeMethod>(); Method[]targetMethods=getClass().getDeclaredMethods(); for(inti=0;i<targetMethods.length;i++){ MethodtargetMethod=targetMethods[i]; //找有@ReactMethod注解的方法 if(targetMethod.getAnnotation(ReactMethod.class)!=null){ StringmethodName=targetMethod.getName(); if(methods.containsKey(methodName)){ //Wedonotsupportmethodoverloadingsincejsseesafunctionasanobjectregardless //ofnumberofparams. thrownewIllegalArgumentException( "JavaModule"+getName()+"methodnamealreadyregistered:"+methodName); } methods.put(methodName,newJavaMethod(targetMethod)); } } returnmethods; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。