最近在看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; }