有没有办法在没有反思的情况下在Kotlin做这样的工作?
inline fun <reified T : kotlin.Enum<T>> safeValueOf(type: String?): T? {
return java.lang.Enum.valueOf(T::class.java, type)
}
Run Code Online (Sandbox Code Playgroud)
由于以下原因,下面的示例无法编译:
inline fun <reified T : kotlin.Enum<T>> safeValueOf(type: kotlin.String?): T?不满足T in的绑定参数:推断类型TestEnum?不是子类型kotlin.Enum<TestEnum?>
enum class TestEnum
fun main() {
val value: TestEnum? = safeValueOf("test")
}
Run Code Online (Sandbox Code Playgroud) 当我通过gradle构建我的Android项目时出现此错误.它大概每周发生一次.
FAILURE: Build failed with an exception.
* What went wrong:
Failed to capture snapshot of input files for task ':xxxxxxxx:compileDebugAidl' property 'importDirs' during up-to-date check.
> Cannot invoke method containsKey() on null object
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Run Code Online (Sandbox Code Playgroud)
知道什么可能导致这个错误吗?谢谢
这是我要弄清楚的一个片段:
class RaceCondition {
Subject<Integer, Integer> subject = PublishSubject.create();
public void entryPoint(Integer data) {
subject.onNext(data);
}
public void client() {
subject /*some operations*/
.buffer(getClosingSelector())
.subscribe(/*handle results*/);
}
private Observable<Integer> getClosingSelector() {
return subject /* some filtering */;
}
}
Run Code Online (Sandbox Code Playgroud)
有一个Subject接受来自外部的事件。有一个客户订阅了该主题,该主题可以处理事件并buffer对其进行处理。这里的主要思想是,应根据使用流中的项目计算出的某些条件每次都发出缓冲的项目。
为此,缓冲区边界本身会监听主体。
一个重要的期望行为:每当边界发射该项目时,也应将其包括在以下的发射中buffer。当前配置不是这种情况,因为该项目(至少是我认为的)在到达之前从关闭选择器中发出buffer,因此它不包括在当前发出中,而是留在等待下一个发出。
有没有一种方法可以使关闭选择器本质上等待项目被首先缓冲?如果不是,是否还有另一种方法可以基于下一个传入项目来缓冲和释放项目?