gpt4 book ai didi

java - RealmObjects 中的自定义方法...解决方案?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:51 26 4
gpt4 key购买 nike

我在我的 android 应用程序中使用 Realm 作为数据模块,尽管我遇到了一些关于如何将自定义方法分配给 Realm 对象的问题。在 iOS 核心数据模块中,您有 NSObjects,它们保存到内存中,并且还允许在它们各自的类中具有延展性。我可以使用什么样的系统来解决这个问题?我尝试为我的所有 Realm 对象制作“父类”,但这没有用。

例如:“TeacherRealm”将只包含教师对象的 getter 和 setter,而“TeacherParent”将允许用户运行某些算法来查找教师的数据。在 TeacherParent 类中,我尝试初始化一个 TeacherRealm,在 TeacherRealm 中,我为 TeacherParent 对象提供了一个 getter 和 setter。瞧,我的 TeacherRealm 对象类不支持自定义 TeacherParent 对象。

有没有人遇到过这个问题/找到了解决方案?我知道这听起来令人困惑,但如有必要我可以提供更多信息

最佳答案

编辑:Realm 0.88.0 has enabled the usage of custom methods ,你也可以用你的 Realm 对象实现接口(interface)。但我保留了我的存储库模式,这是下面的原始答案。撰写本文时的最新版本是 0.88.1。


我坚信data对象应该只包含数据,逻辑应该是分离的。

public interface RealmRepository<T extends RealmObject, ID extends Serializable> {
T findOne(Realm realm, ID id);

RealmResults<T> findAll(Realm realm);

void insertOrUpdate(Realm realm, T t);

void insertOrUpdate(Realm realm, Collection<T> t);

T saveOrUpdate(Realm realm, T t);

RealmList<T> saveOrUpdate(Realm realm, RealmList<T> tList);

RealmQuery<T> query(Realm realm);

void delete(Realm realm, ID id);

void delete(Realm realm, T t);

void deleteAll(Realm realm, RealmResults<T> realmResults);

void deleteEveryObject(Realm realm);

long count(Realm realm);
}

public abstract class BaseRealmRepositoryImpl<T extends RealmObject, ID extends Serializable>
implements RealmRepository<T, ID> {
protected Class<T> clazz;

public BaseRealmRepositoryImpl(Class<T> clazz) {
this.clazz = clazz;
}

@Override
public RealmResults<T> findAll(Realm realm) {
return query().findAll();
}

@Override
public void insertOrUpdate(Realm realm, T t) {
realm.insertOrUpdate(t);
}

@Override
public void insertOrUpdate(Realm realm, Collection<T> collection) {
realm.insertOrUpdate(collection);
}

@Override
public T saveOrUpdate(Realm realm, T t) {
return realm.copyToRealmOrUpdate(t);
}

@Override
public RealmList<T> saveOrUpdate(Realm realm, RealmList<T> list) {
RealmList<T> realmList = new RealmList<>();
for(T t : realm.copyToRealmOrUpdate(list)) {
realmList.add(t);
}
return realmList;
}

@Override
public RealmQuery<T> query(Realm realm) {
return realm.where(clazz);
}

@Override
public void deleteEveryObject(Realm realm) {
realm.delete(clazz);
}

@Override
public void delete(Realm realm, T t) {
t.deleteFromRealm();
}

@Override
public void deleteAll(Realm realm, RealmResults<T> realmResults) {
realmResults.deleteAllFromRealm();
}

@Override
public long count(Realm realm) {
return query().count();
}
}

public abstract class StringRealmRepositoryImpl<T extends RealmObject>
extends BaseRealmRepositoryImpl<T, String>
implements RealmRepository<T, String> {
public StringRealmRepositoryImpl(Class<T> clazz) {
super(clazz);
}

@Override
public T findOne(Realm realm, String id) {
return query(realm).equalTo(getIdFieldName(), id).findFirst();
}

@Override
public void delete(Realm realm, String id) {
delete(realm, findOne(realm, id));
}
}

public class TeacherRealm extends RealmObject {
@PrimaryKey
private String id;
//getter, setter, etc.
}

public class TeacherRepositoryImpl
extends StringRealmRepositoryImpl<TeacherRealm>
implements TeacherRepository {
public TeacherRepositoryImpl() {
super(TeacherRealm.class);
}
}

存储库是可扩展的。

关于java - RealmObjects 中的自定义方法...解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369602/

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