我正在開發一個Android庫。我想讓實作我的庫的用戶無法訪問一些類。主要是介面實作類。例如,我在 moduleA 中有以下類,
- 動物(界面)
- Dog(Animal介面的實作)
- AnimalProvider(幫助從活動/任何視圖初始化 Animal 物件的物件)
由于我使用的是 Kotlin,因此我創建了Dog一個內部類以使其在庫范圍之外無法訪問。但是,問題是AnimalProvider一個物件有一個名為 的公共函式getAnimalSource()。像這樣的東西,
object AnimalProvider {
fun getAnimalSource(
context: Context,
lifecycleOwner: LifecycleOwner
) = Dog( context = Context, lifecycleOwner = lifecycleOwner)
它拋出了一個錯誤,比如,
public function exposes its internal return type.
我需要這個函式來Animal從活動/視圖初始化物件。我是否朝著正確的方向處理這個問題。?或者,當您發布 android 庫時隱藏具體類的正確方法是什么?
uj5u.com熱心網友回復:
您的代碼的問題在于它隱式宣告了回傳型別getAnimalSource()為 beDog和Dogis internal。
您需要通過顯式宣告的回傳型別來隱藏該型別getAnimalSource():
object AnimalProvider {
fun getAnimalSource(
context: Context,
lifecycleOwner: LifecycleOwner
): Animal = Dog( context = Context, lifecycleOwner = lifecycleOwner)
現在,getAnimalSource()被宣告回傳一個Animal,而不是一個Dog,你應該處于更好的狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/477370.html
