我使用一个Android库,它要求我创建两个类,每个类继承自不同的类
(具有公共基类)
现在我有这个代码:
class IncomingFileMVH(itemView: View): Lib.IncomingTextMVH(itemView) { private val tv: TextView = itemView.findViewById(R.id.text) override fun onBind(message: ChatMessage) { super.onBind(message) tv.text = message.text } }
我必须复制这个类来创建一个扩展Lib的OutcomingFileMVH
,即使我的两个类共享完全相同的代码。
我简化了示例的代码,但重复可能很重要
我决定将代码放在这两个类之外的静态方法中,并在类重写的方法中调用它们,但我认为必须有一种更干净的方法来做到这一点。
你能帮我解决这个问题吗?
Lib. OutcomingTextMVH
和Lib. IncomingTextMVH
都继承自Lib. BaseMVH
。
我看到了一种解决方案,但如果多次调用onBind
,它可能是无效的。将此代码放在一个文件中,以确保共享逻辑不会暴露在其他任何地方:
class IncomingFileMVH(itemView: View):
Lib.IncomingTextMVH(itemView) {
override fun onBind(message: ChatMessage) {
super.onBind(message)
bind(message) //Import extension method from Shared
}
}
class OutcomingFileMVH(itemView: View):
Lib.OutComingTextMVH(itemView) {
override fun onBind(message: ChatMessage) {
super.onBind(message)
bind(message)
}
}
private object Shared {
val Lib.BaseMVH.tv: TextView
get() = itemView.findViewById(R.id.text)
fun Lib.BaseMVH.bind(message: ChatMessage) {
tv.text = message.text
}
}
粗略地说,这里的问题是,我们不能在扩展属性中存储任何值。所以每次调用onBind
时,它也会调用itemView。findViewById(R.id.text)
。
还有另一个我更喜欢的解决方案。为属性创建契约接口,为这两个类实现它,并为onBind()创建助手扩展方法。
private interface Base {
val tv: TextView
}
class IncomingFileMVH(itemView: View):
Lib.IncomingTextMVH(itemView), Base {
override val tv: TextView = itemView.findViewById(R.id.text)
override fun onBind(message: ChatMessage) {
super.onBind(message)
bind(message)
}
}
class OutcomingFileMVH(itemView: View):
Lib.OutComingTextMVH(itemView), Base {
override val tv: TextView = itemView.findViewById(R.id.text)
override fun onBind(message: ChatMessage) {
super.onBind(message)
bind(message)
}
}
private fun Base.bind(message: ChatMessage) {
tv.text = message.text
}
是的,您需要使用View
复制所有属性,但是和以前一样,所有绑定逻辑都被放置到单个方法中,所有属性都初始化一次。
但是我有两种回购方式 如何创建两个bean,其中一个是用注入的,另一个是用注入的?
我正在尝试构建一个CI流程,使用Travis CI从github自动将发布工件上传到Maven Central(Sonatype)。基本上,一切都很好,除了在最后;我从maven deploy命令中获得了两个不同的Nexus存储库:一个用于pom和jar;第二个是源代码、javadoc和签名。 我的猜测是,由于中间的元数据上传,他创建了两个存储库: 还我不明白为什么,以及如何修复它。 我的pom。
我在Java中有两个几乎相同的方法。唯一的区别是它们有不同的参数类型。它们使用泛型并返回输入参数的类型T。我怎样才能摆脱重复的代码?下面是我的两个方法。最后,它们都使用不同的类型调用Spring。否则,方法是相同的。
我有一个类,它有两个类似类型的字段。我嘲笑过他们两个。但是当我使用InjectMocks时,InjectMocks错误地将单个模拟注入到这两个字段中。 下面是示例代码类: 下面是我运行测试时的输出:testPrint()-intConsumer被注入到intConsumer和StringConsumer中。 我正在使用Maven。 我创建了这个私有构造函数,专门用于使用InjectMocks进行测
我需要编写一个java方法来从一个对象中获取特定的信息。但是,该对象可以是A类型的,也可以是B类型的。下面是我的代码的一部分: 当我这样写它时,它会引发一个错误,说“重复方法”。我怎么才能让这个起作用?
我想通过类型使用自动连接,以便在运行时容器注入适当的对象并调用适当的bean/method。 1.接口 2.头等舱 4.Rest课 5.application-context.xml 错误: