2018-07-31 @ReactMethod 修飾的函數(shù)的允許的參數(shù)類(lèi)型

@ReactMethod用來(lái)修飾供JS調(diào)用的原生方法

JS的參數(shù)轉(zhuǎn)為JAVA的參數(shù)就是個(gè)問(wèn)題了,都有哪些類(lèi)型可以轉(zhuǎn)換?

在JavaMethodWrapper類(lèi)中的buildArgumentExtractors方法中做了判斷,源碼如下:

private ArgumentExtractor[] buildArgumentExtractors(Class[] paramTypes) {

ArgumentExtractor[] argumentExtractors =new ArgumentExtractor[paramTypes.length];

for (int i =0; i < paramTypes.length; i += argumentExtractors[i].getJSArgumentsNeeded()) {

Class argumentClass = paramTypes[i];

if (argumentClass == Boolean.class || argumentClass ==boolean.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_BOOLEAN;

}else if (argumentClass == Integer.class || argumentClass ==int.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_INTEGER;

}else if (argumentClass == Double.class || argumentClass ==double.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_DOUBLE;

}else if (argumentClass == Float.class || argumentClass ==float.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_FLOAT;

}else if (argumentClass == String.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_STRING;

}else if (argumentClass == Callback.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_CALLBACK;

}else if (argumentClass == Promise.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_PROMISE;

Assertions.assertCondition(

i == paramTypes.length -1,"Promise must be used as last parameter only");

}else if (argumentClass == ReadableMap.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_MAP;

}else if (argumentClass == ReadableArray.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_ARRAY;

}else if (argumentClass == Dynamic.class) {

argumentExtractors[i] =ARGUMENT_EXTRACTOR_DYNAMIC;

}else {

throw new RuntimeException(

"Got unknown argument class: " + argumentClass.getSimpleName());

}

}

return argumentExtractors;

}

從中可以清晰的看到,boolean,int,double,float,String這些java的基本值類(lèi)型都可以轉(zhuǎn),

其他可轉(zhuǎn)類(lèi)都是RN自己實(shí)現(xiàn)的,包括Callback,Promise,ReadableMap,ReadableArray,Dynamic類(lèi),其中比較常用的是

ReadableMap,ReadableArray,對(duì)應(yīng)java的Map和List,都有函數(shù)直接轉(zhuǎn)為HashMap和ArrayList,

Callback是回調(diào)方法,

Promise對(duì)應(yīng)JS的Promise方法,

Dynamic則是一個(gè)靈活類(lèi),這樣JS可以傳不用類(lèi)型的參數(shù),再由JAVA通過(guò)Dynamic的方法自己判斷是那種類(lèi)型的數(shù)據(jù)再做轉(zhuǎn)換。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,144評(píng)論 0 2
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,257評(píng)論 0 38
  • 1.https://ygin.pro/Hots-China-Android-APP-API/
    hypercode閱讀 215評(píng)論 0 0
  • 在一個(gè)出乎意料的早晨,打開(kāi)空間看到姐姐發(fā)的說(shuō)說(shuō),得知外公去了沒(méi)有疾病的天堂。我內(nèi)心卻是難以想象的平靜,我不敢再看手...
    愛(ài)你的365天閱讀 624評(píng)論 1 1
  • 愛(ài)情的火啊,你是因著什么而燃燒又是因著什么而熄滅 大腦無(wú)法分析,心靈無(wú)法捕捉,靈魂無(wú)法感應(yīng), 我能做的就是,坐在旁...
    hannah閱讀 351評(píng)論 0 1

友情鏈接更多精彩內(nèi)容