关于Kotlin修饰符internal和Java的默认修饰符的区别
前言
在讲述问题前我们先了解下Java
和Kotlin
可见性修饰符。
Java可见性修饰符public
、protected
、default
(默认修饰符)、private
可见性如下:
修饰符\作用域 | 当前类 | 同一个包 | 同一个包继承类 | 不同包继承类 | 不同包 |
---|---|---|---|---|---|
public | ✓ | ✓ | ✓ | ✓ | ✓ |
protected | ✓ | ✓ | ✓ | ✓ | ✗ |
default | ✓ | ✓ | ✓ | ✗ | ✗ |
private | ✓ | ✗ | ✗ | ✗ | ✗ |
Kotlin可见性修饰符public
(默认修饰符)、proteced
和private
和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)
关于Kotlin修饰符internal和Java的默认修饰符的区别相关推荐
- java 默认函数,java 构造函数默认修饰符
在进行java web分页实验时忽然想起构造器没有修饰符会如何,及各种修饰符在不同情况下对不同权限下的使用. 进行如下测试: java版本:java 1.7.0 第一.在class类修饰符为publi ...
- java static修饰方法_浅析Java中static修饰符
1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...
- java 反射 方法 修饰符_超类中使用默认修饰符的Java反射访问方法
Method method = getClass().getSuperclass().getDeclaredMethod("doSomething"); method.invoke ...
- git处理换行符问题,webstorm设置默认换行符
不少开发者可能遇到过这个问题:从git上拉取服务端代码,然后只修改了一处地方,准备提交时,用diff软件查看,却发现整个文件都被修改了.这是git自动转换换行符导致的编译问题. 原因 不同操作系统使用 ...
- VSCode:设置默认换行符
windows默认是回车换行符,即:\r\n linux默认是换行符,即:\n 同时在两种操作系统里编辑,经常会造成文件里含有\r,导致在linux会显示^M,也就是回车符 可以对vscode的默认换 ...
- java中访问修饰符_Java中的访问修饰符介绍
java中访问修饰符 什么是访问修饰符? (What are Access Modifiers?) Have you ever wanted to define how people would ac ...
- 关于Java中各种修饰符与访问修饰符的说明
关于Java中各种修饰符与访问修饰符的说明 类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 ...
- JAVA的abstract修饰符 接口interface用法 抽象类和interface的差别
转自:http://blog.csdn.net/zhandoushi1982/article/details/8458081 abstract修饰符可以修饰类和方法. (1)abstract修饰类,会 ...
- Java非访问修饰符
Java非访问修饰符 为了实现一些其他的功能,Java 也提供了许多非访问修饰符. Static:修饰符,用来创建类方法和类变量. Final:修饰符,用来修饰类.方法和变量,final修饰的类不能够 ...
最新文章
- 自监督3D手部姿态估计方法
- iOS UITest之加载其他应用
- Python代码规范和命名规范
- 10.23 相对,绝对路径,cd,mkdir/rmdir,rm命令
- 无法设置共享文件夹的解决方法收集
- 2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO
- php 安全包含文件系统,PHP_PHP四大安全策略,一、文件系统安全php如果具有r - phpStudy...
- linux网络编程之用一张图片说明套接口常用函数
- Android4.0设置界面修改总结
- (2)zynq FPGA AXI_Lite总线介绍
- 关于linux操作系统的特点,LINUX操作系统有哪些概念和特点?
- 【BZOJ4484】【JSOI2015】最小表示(拓扑排序,bitset)
- 腾讯企业邮箱不能发送短信认证
- signature=3cb79ad68e1de6fcae23aede975d0e4e,考研二外法语易错题汇总
- 大白映射 宝马Esys编程设码映射、USB设备映射
- validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending c
- 切换window窗口
- 使用turtle绘制螺旋线
- mysql备份工具_MySQL常用的备份方式与备份工具简介
- 响应式HTML网页开发,web开发中的响应式网页设计