美文网首页
2018-07-31 @ReactMethod 修饰的函数的允许

2018-07-31 @ReactMethod 修饰的函数的允许

作者: AndroidTalent | 来源:发表于2018-07-31 18:20 被阅读0次

@ReactMethod用来修饰供JS调用的原生方法

JS的参数转为JAVA的参数就是个问题了,都有哪些类型可以转换?

在JavaMethodWrapper类中的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的基本值类型都可以转,

其他可转类都是RN自己实现的,包括Callback,Promise,ReadableMap,ReadableArray,Dynamic类,其中比较常用的是

ReadableMap,ReadableArray,对应java的Map和List,都有函数直接转为HashMap和ArrayList,

Callback是回调方法,

Promise对应JS的Promise方法,

Dynamic则是一个灵活类,这样JS可以传不用类型的参数,再由JAVA通过Dynamic的方法自己判断是那种类型的数据再做转换。

相关文章

  • 2018-07-31 @ReactMethod 修饰的函数的允许

    @ReactMethod用来修饰供JS调用的原生方法 JS的参数转为JAVA的参数就是个问题了,都有哪些类型可以转...

  • js中的异步(async/await)函数和Promise

    异步函数指的是async修饰的函数这类函数中,允许await修饰函数调用,以等待被调用函数的异步结果以下为MDN的...

  • python 装饰符 @ 的理解

    ‘@’ 符号用作函数修饰符是 python2.4新 增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在...

  • 【函数学习】修饰符@装饰器与classmethod修饰符

    一、修饰符 python修饰符‘@’引用已有的函数,对下面的函数进行修饰。引用函数必须放在修饰函数的上面,引用函...

  • C#入门笔记(一)

    0x00 访问修饰符: Public(类默认)Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的...

  • 谈谈 async/await 的使用方式和场景

    async 是用来修饰函数的声明, 使用async 修饰的函数会变成一个异步函数. await 用来修饰函数的调用...

  • C++ explicit关键字的初步研究

    explicit关键字用于修饰构造函数,它不允许构造函数的参数进行隐式的类型转换。构造函数参数的隐式转换有时候很方...

  • Static的用法

    一, 修饰函数 static修饰函数时, 函数不能被外部文件访问extern修饰函数时, 函数可以被外部文件访问 ...

  • 修饰器

    函数修饰符@,在函数定义时使用,放在函数前一行,对下一行的函数起修饰(修改)作用。被修饰函数会作为参数传递给修饰函...

  • static关键字修饰类

    java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类,普通类是不允许声明...

网友评论

      本文标题:2018-07-31 @ReactMethod 修饰的函数的允许

      本文链接:https://www.haomeiwen.com/subject/ctohvftx.html