kotlin - Kotlin - 替换类委托 - 具有相同功能的多个类不同的签名
问题描述
我正在使用 JunitRules RuleChain 和 Kotlin。我对两者都是新手,并且有两个类做完全相同的事情,唯一的区别是规则链。
第一堂课看起来像这样:
class BaseActivityTestRule<T : Activity>(
private val activityRule : ActivityRule<T>
) : TestRule by RuleChain.outerRule(CustomRuleOne).around(activityRule) {
// do something
}
我需要另一个与委托完全相同BaseActivityTestRule
但委托不同的类。
例子 :
class ExtendedActivityTestRule<T : Activity>(
private val activityRule : ActivityRule<T>
) : TestRule by RuleChain.outerRule(CustomRuleOne).around(CustomRuleTwo).around(activityRule) {
// do something
}
如何在不复制代码块的情况下完成此操作?
解决方案
只需将布尔参数传递给您的构造函数并使用它来创建基本或扩展TestRule
:
fun <T> createTestRule(activityRule: ActivityRule<T>, extended: Boolean) =
if(extended)
RuleChain.outerRule(CustomRuleOne).around(CustomRuleTwo).around(activityRule)
else
RuleChain.outerRule(CustomRuleOne).around(activityRule)
class ActivityTestRule<T : Activity>(
private val activityRule : ActivityRule<T>,
extended: Boolean = false
) : TestRule by createTestRule(activityRule, extended) {
// do something
}
推荐阅读
- java - 刷卡刷新覆盖在 webview 中的我的网页中滚动菜单
- iphone - 找不到离子目标设备
- angular - 如何在不使用 Ionic 框架的情况下在 Angular 8 中使用cordova 文件插件
- java - 如何在 Wildfly/Thorntail 的属性文件中转义 ${...} (因此它们不会被评估为表达式)
- azure-functions - 调试Azure函数V1.0
- sql - 使用 Django 路由器进行内部连接
- firebase - Flutter:Firebase FieldValue.serverTimestamp() 到 DateTime 对象
- oracle - 如何从批处理文件执行sql文件并将输出显示到屏幕
- c++ - 使用 range-v3 进行转换
- python - 如何使用已经测试过的模型预测新数据的输出?