【发布时间】:2020-08-03 13:06:40
【问题描述】:
我遇到了有关访问抽象类的问题。
作为背景,我在一个公共模块中有一个抽象类。抽象类只是一些值的设置器/获取器。
abstract class BaseConfiguration {
abstract var key: String?
abstract var token: String?
}
通用模块由另一个模块使用,即 SDK。因此,在 gradle 中实现了这个通用模块。
分级
implementation project(":common")
在 SDK 模块内部,有一些公共接口允许设置/获取 BaseConfiguration 文件中的值。
我遇到的冲突是 Kotlin 一切正常。我可以创建一个项目,然后将 SDK 添加为依赖项,然后通过 SDK 中提供的接口为 BaseConfiguration 设置值。
但是,当我尝试使用 Java 语言时,我收到“无法访问 BaseConfiguration”错误。似乎解决此问题的唯一方法是将我的 SDK gradle 更新为 api。
梯度变化
api project(":common")
我对这种变化感到担忧,因为公共模块应该是内部的并且只由 SDK 使用。应用程序级别不应访问它。应用只能访问 SDK 提供的接口。
有谁知道为什么这在 Kotlin 中可以完美运行,但在 Java 中却不行?我究竟做错了什么?
补充说明: 当为 BaseConfiguration 类将 Kotlin 反编译为 Java 时,它显示所有内容都是公开的。
public abstract class BaseConfiguration {
@Nullable
public abstract String getKey();
public abstract void setKey(@Nullable String var1);
@Nullable
public abstract String getToken();
public abstract void setToken(@Nullable String var1);
}
【问题讨论】:
标签: java android gradle access-modifiers