3 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
在您提到的用例中,實(shí)際上沒(méi)有重大區(qū)別。
現(xiàn)在想象一下我們需要通過(guò)函數(shù)調(diào)用動(dòng)態(tài)創(chuàng)建對(duì)象嗎?
fun getTimeObject() {
val timeInMillis = System.currentTimeMillis()
return TimeObject(timeInMillis)
}
然后,當(dāng)它有一個(gè)新訂閱者時(shí),Single.just(getTimeObject())結(jié)果Single將發(fā)出相同的信息Long。
然而,當(dāng)它有一個(gè)新訂閱者時(shí)Single.fromcallable(()-> getTimeObject()),結(jié)果Single將發(fā)出一個(gè)不同的Long指示以毫秒為單位的當(dāng)前時(shí)間。
那是因?yàn)閒romCallable每當(dāng)它有一個(gè)新訂閱者Lazily 時(shí),它就會(huì)執(zhí)行它的 lambda 。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
當(dāng)你有一個(gè)類似的函數(shù)時(shí),你應(yīng)該使用fromCallable()
MyObject myFunction() {
// some login here
return new MyObject();
}
然后你可以像這樣從這個(gè)函數(shù)創(chuàng)建Single:
Single.fromCallable(() -> myFunction());
Single.just(myObject)只是在沒(méi)有任何邏輯的情況下發(fā)出您的對(duì)象。
因此,當(dāng)您想要發(fā)出特定項(xiàng)目時(shí),無(wú)需使用fromCallable()。
添加回答
舉報(bào)