我正在开发一个Android库.我想让实现我的库的用户无法访问一些类.主要是接口实现类.例如,我在moduleA中有以下类,

  • 动物(界面)
  • Dog(动物接口的实现)
  • AnimalProvider(帮助从活动/任何视图初始化动物对象的对象)

由于我使用的是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库时,隐藏具体类的正确方法是什么.?

推荐答案

代码的问题是,它隐式地将getAnimalSource()的返回类型声明为Dog,而Doginternal.

您需要通过显式声明返回类型getAnimalSource()来隐藏该类型:

object AnimalProvider {
 fun getAnimalSource(
 context: Context, 
 lifecycleOwner: LifecycleOwner
 ): Animal = Dog( context = Context, lifecycleOwner = lifecycleOwner)

现在,getAnimalSource()被声明为返回Animal,而不是Dog,您的状态应该更好.

Android相关问答推荐

使用不同的Google帐户登录

图像在Android Studio中显示,但不在设备中显示

RemoteActivityHelper.startRemoteActivity不适用于Android Wear OS 4模拟器

Android 14(Oneui 6)中的本地推送通知行为不一致

Jetpack编写使用自定义主题覆盖库中主题部分

Jetpack Compose和Android Studio中的普通设计工具有什么不同?

我正在创建一个简单的连接四个游戏,我需要一个弹出式窗口当你赢了

我无法在底部导航栏中正确导航-Android底部导航视图

jetpackcompose-如何对解析后的复杂对象进行状态提升?

Play store 的 Play 完整性与 Firebase 应用判断 Play 完整性

如何在 compose 中使用可变对象?

通过 setIntentScanningStrategyEnabled(true) 未检测到信标的 Android Beacon 库后台扫描

Android Studio 复制类 kotlin

在 Jetpack Compose 中重用具有重复代码的列

Jetpack Compose 部分或开放侧边框

Jetpack 将 Grid 与基于大小的自适应列数组合在一起

单击 Jetpack Compose(单选)时,我无法为列表中的单个文本着色

房间创建三四表关系

我应该使用 Bluetooth Classic 还是 Bluetooth LE 与我的移动应用程序通信?

Kotlin:如何在另一个变量的名称中插入一个变量的值