如何使接口的具体实现无法在库范围之外访问。?
How to make concrete implementation of an interface not accessible outside the scope of the library.?
我正在开发一个 Android 库。我想让实施我的库的用户无法访问一些 classes。主要是接口实现classes。例如,我在模块 A 中有以下 classes,
- 动物(界面)
- 狗(动物界面的实现)
- AnimalProvider(帮助从 activity/any 视图初始化 Animal 对象的对象)
由于我使用的是 Kotlin,所以我将 Dog
设为内部 class 以使其在库范围之外无法访问。但是,问题是 AnimalProvider
是一个具有名为 getAnimalSource()
的 public 函数的对象。像这样,
object AnimalProvider {
fun getAnimalSource(
context: Context,
lifecycleOwner: LifecycleOwner
) = Dog( context = Context, lifecycleOwner = lifecycleOwner)
它会抛出一个错误,例如,
public function exposes its internal return type
.
我需要这个函数从 activity/view 初始化 Animal
对象。我在正确的方向上处理这个问题吗?或者,当您发布 android 库时,隐藏具体 classes 的正确方法是什么?
您的代码的问题在于它隐式声明 getAnimalSource()
的 return 类型为 Dog
,而 Dog
为 internal
。
您需要通过显式声明 getAnimalSource()
的 return 类型来隐藏该类型:
object AnimalProvider {
fun getAnimalSource(
context: Context,
lifecycleOwner: LifecycleOwner
): Animal = Dog( context = Context, lifecycleOwner = lifecycleOwner)
现在,getAnimalSource()
被宣布为 return 和 Animal
,而不是 Dog
,您应该处于更好的状态。
我正在开发一个 Android 库。我想让实施我的库的用户无法访问一些 classes。主要是接口实现classes。例如,我在模块 A 中有以下 classes,
- 动物(界面)
- 狗(动物界面的实现)
- AnimalProvider(帮助从 activity/any 视图初始化 Animal 对象的对象)
由于我使用的是 Kotlin,所以我将 Dog
设为内部 class 以使其在库范围之外无法访问。但是,问题是 AnimalProvider
是一个具有名为 getAnimalSource()
的 public 函数的对象。像这样,
object AnimalProvider {
fun getAnimalSource(
context: Context,
lifecycleOwner: LifecycleOwner
) = Dog( context = Context, lifecycleOwner = lifecycleOwner)
它会抛出一个错误,例如,
public function exposes its internal return type
.
我需要这个函数从 activity/view 初始化 Animal
对象。我在正确的方向上处理这个问题吗?或者,当您发布 android 库时,隐藏具体 classes 的正确方法是什么?
您的代码的问题在于它隐式声明 getAnimalSource()
的 return 类型为 Dog
,而 Dog
为 internal
。
您需要通过显式声明 getAnimalSource()
的 return 类型来隐藏该类型:
object AnimalProvider {
fun getAnimalSource(
context: Context,
lifecycleOwner: LifecycleOwner
): Animal = Dog( context = Context, lifecycleOwner = lifecycleOwner)
现在,getAnimalSource()
被宣布为 return 和 Animal
,而不是 Dog
,您应该处于更好的状态。