【发布时间】:2019-09-15 07:38:39
【问题描述】:
我们正在使用 SWIG 在 Android 中创建 C++ API 到 Java 之间的 JNI API。
例如,假设我们的 C++ 类是:
class TestAnnotation {
public:
void setMessage(char * message);
char * getMessage();
private:
char* message = nullptr;
};
SWIG 生成这个自动生成的 Java 类:
public class TestAnnotation {
...
public void setMessage(String message) {
myJNI.TestAnnotation_setMessage(swigCPtr, this, message);
}
public String getMessage() {
return myJNI.TestAnnotation_getMessage(swigCPtr, this);
}
}
如您所见,message 可以为 null,get 和 set 方法可以接收/返回 null String(JNI 自动生成的代码在这种情况下按预期运行,允许使用jstring 或 null)。
我的问题是:SWIG 是否能够添加 @Nullable 或 @NonNull 之类的注释以匹配 C++ API(如果我们需要向 SWIG 提供“提示”,那也可以)。
所以在这种情况下,所需的自动生成的 Java API 将是:
public class TestAnnotation {
...
public void setMessage(@Nullable String message) {
myJNI.TestAnnotation_setMessage(swigCPtr, this, message);
}
@Nullable
public String getMessage() {
return myJNI.TestAnnotation_getMessage(swigCPtr, this);
}
}
这很重要,因为我们将这个 Java API 与 Kotlin 一起使用,并且注释的缺失使得使用 Kotlin 智能功能变得更加困难。
【问题讨论】:
标签: java android kotlin swig java-annotations