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

前言

在讲述问题前我们先了解下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)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Kotlin中的修饰符包括访问权限修饰符和成员修饰符。访问权限修饰符包括public、protected、private和internal。其中,public表示所有地方可见,protected表示子类中可见,private表示类中可见,internal表示模块中可见。\[1\]成员修饰符包括override、open、final和abstract。override表示重写函数,open表示可被重写,final表示不能被重写,abstract表示抽象函数。\[2\]此外,Kotlin中还有一些特殊的修饰符,如in和out用于泛型的修饰,in相当于Java中的super关键字,out相当于Java中的extends关键字。\[1\]需要注意的是,在Kotlin中,外层的类不能访问内部类的private成员。\[3\] #### 引用[.reference_title] - *1* *2* [kotlin中的修饰符](https://blog.csdn.net/mjb00000/article/details/79268392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Kotlin语法(九)-修饰符](https://blog.csdn.net/tangxl2008008/article/details/52421476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值