关于Kotlin修饰符internal和Java的默认修饰符的区别

本文探讨了Kotlin中默认public修饰符的误导,以及如何通过internal实现局部隐藏。作者提出了将父类改为public并内部隐藏细节的方法,以及更深入的解决方案链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在讲述问题前我们先了解下JavaKotlin可见性修饰符。

Java可见性修饰符publicprotecteddefault(默认修饰符)、private可见性如下:

修饰符\作用域当前类同一个包同一个包继承类不同包继承类不同包
public
protected
default
private

Kotlin可见性修饰符public(默认修饰符)、protecedprivate和Java一致,区别在于Kotlin没有default取而代之的是internal;关于internal修饰符,官方文档对于它的描述如下:

可见性修饰符internal意味着该成员只在相同模块内可见。更具体地说,一个模块是编译在一起的一套 Kotlin 文件:
一个 IntelliJ IDEA 模块;
一个 Maven 项目;
一个 Gradle 源集(例外是 test 源集可以访问 main 的 internal 声明);
一次 Ant 任务执行所编译的一套文件

问题发现

在Kotlin中,默认修饰符是public,整个项目可见;当你编写SDK打包成aar给其它开发者调用时,为了隐藏某个无需开放的类对象,使用internal对整个类进行修饰。例如给某个中间类使用了internal修饰符,那么继承了该类的子类只能使用也必须使用internal或者private进行修饰,无法使用public进行修饰;而恰好这些子类你需要对外开放的话就很麻烦。

解决方案

简单的解决方法,将父类的修饰符修改为public,然后将父类不开放的属性和函数使用internal修饰

如果还想要有更进一步的解决方案,可以参考以下链接:

Does Kotlin support package protected visibility?
Package protected alternative in Kotlin
Provide package-private visibility modifier (or another scope reducing mechanism)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值