gpt4 book ai didi

java - Realm 数据库如何工作?

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:21 25 4
gpt4 key购买 nike

我已经开始在我的应用程序中使用 Realm 数据库,但是我无法理解 Realm 如何知道我的模型类的成员。

我的 Realm 模型类的唯一注释是 @PrimaryKey 仅在一个变量上,其他变量没有注释。

我能想到的另一种方法是 Realm 使用反射来计算模型类中的变量,但由于反射在 Android 上很慢,我不认为 Realm 依赖于反射,因为他们将自己推销为快速数据库。

有人可以告诉我 Realm 是如何工作的,或者可以向我指出一些展示 Realm 如何工作的文章吗?

最佳答案

The only annotation that my realm model class has is @PrimaryKey on only one variable, other variables have no annotations.

错误:)当您说extends RealmObject时,您实际上是从定义为的类继承

@RealmClass  // <---- annotation
public abstract class RealmObject implements RealmModel {
}

因此,您的类具有 @RealmClass 注释,注释处理器已注册该注释,然后它可以读取所有字段,例如:

@AutoService(Processor.class)
public class ExampleProcessor extends AbstractProcessor {
ProcessingEnvironment processingEnvironment;
Elements elements;
Messager messager;
Filer filer;
Types types;

@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
this.processingEnvironment = processingEnv;
this.filer = processingEnvironment.getFiler();
this.elements = processingEnvironment.getElementUtils();
this.messager = processingEnvironment.getMessager();
this.types = processingEnvironment.getTypeUtils();
}

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
Set<? extends Element> annotatedElements = roundEnv.getElementsAnnotatedWith(RealmClass.class);
for(Element element : annotatedElements) {
// ...
}
// ...
}

@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
}

@Override
public Set<String> getSupportedAnnotationTypes() {
Set<String> annotations = new HashSet<>();
annotations.add(RealmClass.class.getName());
return Collections.unmodifiableSet(annotations);
}
}
<小时/>

然后它可以为每个用@RealmClass注释的对象生成一个代理类。该代码可在 here 处开源获取。 .

当您有包含 RealmObjects 的库项目时,事情会变得有点棘手,因此为什么您需要指定 @RealmModule (来定义架构并且它是一个库模块)。

<小时/>

至于用代理 getter/setter 替换字段访问,这是由名为 Realm-Transformer 的 Gradle 插件(使用 Javassist)完成的,它使用所谓的 Transform API,并且是用 Groovy 编写的。

关于java - Realm 数据库如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44544883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com