[英]Handler()postDelay is unreachable for this Kotlin code, how to fix it?
[英]How should I handle logically unreachable code
我有一個 class 實現了一個接口,它迫使我實現 2 種方法 - fun check(): Boolean
和fun onCheckFalse(): Int
。
用法看起來像:
if (check().not()) return onCheckFalse()
在我的實現中,我總是從check()
返回true
,因此onCheckFalse()
在邏輯上變得不可訪問。
我應該在那里做什么?
具體用例是kotlin
,但當然也歡迎提供一般性答案。
被迫實現在特定實現 class *中毫無意義的接口方法並不少見。
在 Java 中——因此在 Kotlin/JVM 中——通常的方法是拋出UnsupportedOperationException
; 看到這個問題。 這樣,如果有人不經意地調用了您的方法,他們將很難發現您的 class 不提供該功能!
在特定情況下,該方法是一個通知或回調——為了類自身的利益而調用,而不是為調用者提供任何功能——那么告訴調用者它沒有實現是沒有意義的,所以最好的方法就是什么都不做的空方法。
(但是,OP 已澄清后者不適用於此特定問題,盡管有on…()
方法名稱。)
* UnsupportedOperationException
的原始用例是針對不可變的 collections:在 Java 中,相同的接口(例如java.util.List
)用於可變和不可變的 collections,因此指定變異方法以在調用不可變時拋出該異常collections。
當然,這種特殊情況不適用於 Kotlin,它將這些接口分為兩個:一個只讀超級接口(例如List
)和一個添加了變異方法的子接口(例如MutableList
)。
但是在其他情況下,實現可能無法實現某些方法。 例如,非事務性數據庫 class 可能無法回滾更改,或者沒有 alpha 通道的圖像可能無法設置透明度。
不過,我認為該異常被過度使用了。 如果您的 class 可以在某些情況下執行該操作,但在其他情況下不能執行操作(如我在網上找到的許多示例),那么拋出IllegalArgumentException
或IllegalStateException
可能更合乎邏輯且更有幫助。
理想情況下,將設計一個接口,以便任何實現都不需要拋出UnsupportedOperationException
。 List
示例表明,盡管 Kotlin 的集合接口比 Java 的稍微復雜一點,但它們的表現力更強; 您可以在編譯時判斷您擁有的是只讀集合還是讀/寫集合,這樣可以避免整個 class 的運行時錯誤。 因此,如果您正在設計界面,那么值得提前考慮並盡可能避免這種需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.