首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将存储库类委托给实现BaseDao的多个Daos有可能吗?

将存储库类委托给实现BaseDao的多个Daos有可能吗?
EN

Stack Overflow用户
提问于 2019-10-12 05:48:49
回答 1查看 117关注 0票数 8

我已经为我的Android应用程序创建了一个Room数据库。My FooDao和BarDao都实现了BaseDao:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface BaseDao<T> {
    @Insert
    fun insert(obj: T): Long
    @Update
    fun update(obj: T)
}

@Dao
interface FooDao: BaseDao<FooEntity> {
    @Query("some query")
    fun doSomethingWithFoo()
}

@Dao
interface BarDao: BaseDao<BaseEntity> {
    @Query("some other query")
    fun doSomethingWithBar()
}

我也有一个仓库类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyRepo(private val fooDao: FooDao, private val barDao: BarDao) {
    fun doSomethingWithFoo() = fooDao.doSomethingWithFoo()
    fun doSomethingWithBar() = barDao.doSomethingWithBar()
}

但是想象一下,FooDao、BarDao和MyRepo不仅仅有这两个函数。

我已经了解了如何使用类委托来实现组合继承。因此,我试图减少MyRepo中的模板,让它委托简单的函数,这些函数只是调用dao的函数并返回dao的返回值。我应该这样做是有意义的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyRepo(...): FooDao by fooDao, BarDao by barDao {
    //fun doSomethingWithFoo no longer necessary
    //fun doSomethingWithBar no longer necessary
}

然而,Android Studio给了我一个红色的曲折,上面写着Type parameter T of BaseDao has inconsistent values: FooEntity, BarEntity

这是不是意味着减少像MyRepo.doSomethingWithFoo = fooDao.doSomethignWithFoo这样的样板文件的希望破灭了?或者,有没有办法做到这一点?

我试图实际覆盖MyRepo中的BaseDao函数,以为它会停止抱怨FooEntity和BarEntity:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyRepo(...): BaseDao<Any>, SetDao by setDao, ... {
    override fun insert(t: Any): Long = 0L
}

但这只是在不一致类型消息中添加了"Any“。

EN

回答 1

Stack Overflow用户

发布于 2020-05-06 04:52:10

我也面临着同样的问题,并用注解替换了泛型类。

我们最近发布了我们的库LivingRoom

您只需使用适当的注释标记实体类(@Insertable、@Deletable、@Updatable、@Selectable ...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58351265

复制
相关文章
国产操作系统有实现弯道超车的可能吗?
国产操作系统采取了成熟的开源操作系统Linux的技术路线,同时也投入了大量研发,从性能上已经较好的实现了追赶,基本达到了好用阶段。
海岛船长加西亚
2022/09/08
1.1K0
利用委托实现winform多个窗体间的传值
父窗体创建了两个子窗体——子窗体1和子窗体2,子窗体1产生的数据要在子窗体2中显示出来。
角落工程师
2022/05/14
1.7K0
Python 有可能删除 GIL 吗?
我们知道,在 CPython 中,有一个全局解释器锁,英文叫 global interpreter lock,简称 GIL,是一个互斥锁,用来保护 Python 世界里的对象,防止同一时刻多个线程执行 Python 的字节码,从而确保线程安全,这导致了 Python 的线程无法利用多核 CPU 的优势,因此有人说 Python 的多线程是伪多线程,性能不高,那么 Python 将来有可能去除 GIL 吗?
somenzz
2021/03/10
2.8K0
Spring同一接口有多个实现类,如何注入
最近写了前台一个管理模块,后来也是我来写,采用四层架构,在定义接口时,基本是一个接口对应一个实现类,使用@Autowired注解,但我想如果有多个实现类,如何注解,来梳理一下
kiki.
2022/09/29
2.6K0
Autowired实现多个实现类
# Autowired实现多个实现类 @Autowired 如何实现多个实现类 # 解决方案 @Service("a") public class AService implements Service {} @Service("b") public class BService implements Service { @Qualifier("a") @Autowired Service aService; @Qualifier("b") @Autowired Service bService;
taixingyiji
2022/07/25
6950
BCG称工业机器人价格将降20%,有可能吗?
据国外媒体报道,波士顿咨询集团(以下简称“BCG”)周二发布最新研究报告称,机器人技术的快速发展及价格下跌将引发新的制造业革命,从而导致工厂将加快用机器人取代工人的步伐。BCG的研究报告表示,先进机器人的价格加快下跌,以及能力日益改进,如具有更好的“观察”能力、抓取能力和自我调整能力等,让它们对更多行业的小型制造商也具有吸引力。 BCG表示,在机器人应用上,法国、意大利和比利时这些国家将落后,主要原因是这些国家的劳动法缺乏弹性,使制造商难以通过自动化取代工人。” 该研究报告称,未来10年,先进工业机
机器人网
2018/04/23
1.1K0
BaseDao[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/105946.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/09
2350
聊聊daos高性能分布式存储
简介 现在大部分应用的IO模型会增加元数据和不对齐的数据碎片比例越来越大,同时传统的存储软件引入的对齐约束和通过大量延迟导致针对这些类型的IO应用越来越差的性能。大容量持久化内存(SCM)和高速硬件结构两者结合的,为重新定义存储规范和高效支持现在的IO密集型应用提供最佳的机会 基于SCM需要重新考虑完整的存储栈的设计,为了释放这些新硬件的性能,新的软件栈采用字节粒度无共享的接口,并且它能够支持大规模分布式存储。DAOS是基于SCM和NVMe的全新的IO架构,通过fabric全局访问对象的地址空间,保证性能的
用户4700054
2022/08/17
3.5K0
聊聊daos高性能分布式存储
边缘计算将蚕食云计算,可能吗?
目前越来越多的工作负载、数据、处理和业务价值更倾向于使用边缘计算。在这一趋势下,边缘计算可能变得与云计算同样重要。 随着越来越多的工作负载被放置于云端,一些企业为了实现转型开始向云迁移,云计算正在蚕食
静一
2018/03/27
1.3K0
边缘计算将蚕食云计算,可能吗?
一个类实现多个接口的同名方法会报错吗?
大家好,我是小刀,今天和大家讨论一下接口实现的两个问题,众所周知,接口是设计模式的基石,所以了解接口的一些实现对理解设计模式,源码都大有裨益!
微笑的小小刀
2020/06/28
1.2K0
如果Service有多个实现类,它怎么知道该注入哪个ServiceImpl类?
方法一:Controller中注入service的时候使用@Autowired自动注入,@Qualifier("beanId")来指定注入哪一个。
Java旅途
2021/06/08
2.4K0
java interface有多个implement的情况下,@Inject调用实现类的选择
spring的@Autowire @Qualifier @Resource @Component使用
全栈程序员站长
2022/11/03
6390
数据库的存储系列———将图片存储到数据库
在很多时候我们都使用数据库才存储我们的数据,然而我们通常在数据库里面存放的数据大多都支持数或者是一些字符,那么如果我们想在数据库里面存放图片,那么应该要怎么做的?
全栈程序员站长
2022/09/14
3.5K0
父类委托机制详解(全盘负责委托机制 )
    例如:用eclipse的打包工具将TestClassLoader输出成jre/lib/ext目录下的itcast.jar包,再在eclipse中运行这个类,运行结果显示为ExtClassLoadr。此时的环境状态是classpath目录有TestClassLoader.class,ext/itcast.jar包中也有TestClassLoader.class,我们知道,使用一个类,应该只出现一个字节码文件,现在却出现两个了,肿么办?这时候我们就需要了解类加载的具体过程和原理了。如下所示:
黑泽君
2018/10/11
3.3K0
父类委托机制详解(全盘负责委托机制 )
类加载器的双亲委托模式
遵照之前解析反射 中,我们说到类的加载器ClassLoader在对类进行加载的时候,默认会使用双亲委托模式。系统会判断当前类是否已经被加载,如果已经被加载,就会直接返回可用的类,否则就会尝试加载,在尝试加载时,会先请求双亲处理,如果双亲请求失败,则会自己加载。
算法之名
2020/05/26
8400
(a ==1 && a== 2 && a==3) 有可能是 true 吗?
大部分解决方法都是使用toString或者valueOf实现的,主要利用:运算数两边的类型不同时,会进行隐式转换.
用户9914333
2022/07/21
3040
(a ==1 && a== 2 && a==3) 有可能是 true 吗?
JavaScript给元素添加多个class的简单实现
当div 中的class 有多个classname时,它会同时应用这几个class定义的CSS样式,那么应用时的优先级是怎么样的?
浩Coding
2019/08/26
4.3K0
JavaScript给元素添加多个class的简单实现
C# 委托/Func() 中 GetInvocationList() 方法的使用 | 接收委托多个返回值
当你编写一个 delegate委托 或 Func<>泛型委托 ,并为实例绑定多个方法时,每个方法都有一个返回值。可能会遇到这种情况:
痴者工良
2021/04/26
2.8K0
如何将 starrocks 的 be 的多个存储目录剔除一个?
starrocks 集群的 be 节点的多个存储目录,有一个磁盘空间过小,搭建时误配置上,如下所示:
用户9865966
2022/06/29
8290
如何将类序列化并直接存储入数据库
本文将从这两个格式器入手,先向大家介绍分别用它们如何实现序列化和反序列化,然后比较两种格式器的不同点。接着我会向大家介绍实现序列化对对象类型的一些要求,同时还要向大家介绍两种不同的序列化方式:基本序列化(Basic Serialization)和自定义序列化(Custom Serialization)。最后,我还会给大家介绍一个实例程序以加深大家对序列化机制的理解程度。
全栈程序员站长
2022/07/19
2.3K0
如何将类序列化并直接存储入数据库

相似问题

具体的类可以将方法实现委托给子类吗?

11

委托给基类实现

10

如何委托给实现类

32

存储库委托给外部对象存储

11

集合实现,主要委托给类成员。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文