前言

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

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

  1. java 默认函数,java 构造函数默认修饰符

    在进行java web分页实验时忽然想起构造器没有修饰符会如何,及各种修饰符在不同情况下对不同权限下的使用. 进行如下测试: java版本:java 1.7.0 第一.在class类修饰符为publi ...

  2. java static修饰方法_浅析Java中static修饰符

    1.概述 static关键字的中文意思是静态的,该修饰符可以修饰字段.方法.内部类.使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的 ...

  3. java 反射 方法 修饰符_超类中使用默认修饰符的Java反射访问方法

    Method method = getClass().getSuperclass().getDeclaredMethod("doSomething"); method.invoke ...

  4. git处理换行符问题,webstorm设置默认换行符

    不少开发者可能遇到过这个问题:从git上拉取服务端代码,然后只修改了一处地方,准备提交时,用diff软件查看,却发现整个文件都被修改了.这是git自动转换换行符导致的编译问题. 原因 不同操作系统使用 ...

  5. VSCode:设置默认换行符

    windows默认是回车换行符,即:\r\n linux默认是换行符,即:\n 同时在两种操作系统里编辑,经常会造成文件里含有\r,导致在linux会显示^M,也就是回车符 可以对vscode的默认换 ...

  6. java中访问修饰符_Java中的访问修饰符介绍

    java中访问修饰符 什么是访问修饰符? (What are Access Modifiers?) Have you ever wanted to define how people would ac ...

  7. 关于Java中各种修饰符与访问修饰符的说明

    关于Java中各种修饰符与访问修饰符的说明 类: 访问修饰符  修饰符  class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 ...

  8. JAVA的abstract修饰符 接口interface用法 抽象类和interface的差别

    转自:http://blog.csdn.net/zhandoushi1982/article/details/8458081 abstract修饰符可以修饰类和方法. (1)abstract修饰类,会 ...

  9. Java非访问修饰符

    Java非访问修饰符 为了实现一些其他的功能,Java 也提供了许多非访问修饰符. Static:修饰符,用来创建类方法和类变量. Final:修饰符,用来修饰类.方法和变量,final修饰的类不能够 ...

最新文章

  1. 自监督3D手部姿态估计方法
  2. iOS UITest之加载其他应用
  3. Python代码规范和命名规范
  4. 10.23 相对,绝对路径,cd,mkdir/rmdir,rm命令
  5. 无法设置共享文件夹的解决方法收集
  6. 2假动作,数据缓冲,CCEaseExponential,CCEaseElastic,CCEaseBounce,CCCallFunc,funcNCallBack,funcNDCallBack,funcO
  7. php 安全包含文件系统,PHP_PHP四大安全策略,一、文件系统安全php如果具有r - phpStudy...
  8. linux网络编程之用一张图片说明套接口常用函数
  9. Android4.0设置界面修改总结
  10. (2)zynq FPGA AXI_Lite总线介绍
  11. 关于linux操作系统的特点,LINUX操作系统有哪些概念和特点?
  12. 【BZOJ4484】【JSOI2015】最小表示(拓扑排序,bitset)
  13. 腾讯企业邮箱不能发送短信认证
  14. signature=3cb79ad68e1de6fcae23aede975d0e4e,考研二外法语易错题汇总
  15. 大白映射 宝马Esys编程设码映射、USB设备映射
  16. validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending c
  17. 切换window窗口
  18. 使用turtle绘制螺旋线
  19. mysql备份工具_MySQL常用的备份方式与备份工具简介
  20. 响应式HTML网页开发,web开发中的响应式网页设计

热门文章

  1. 关于的FPV救援机器人的演讲。
  2. NetSuite 使用公司间跨组织履行处理销售和退货
  3. 一二线城市知名IT互联网公司名单,有你的目标公司吗?
  4. 粉笔5.8课程——资料分析
  5. 企业如何实现远程数据采集
  6. HanLP中人名识别分析详解
  7. KeePass使用心得
  8. Linux C : lseek函数
  9. 【百度飞桨黄埔学院】CTO案头必备|AI技术产业落地的42章经
  10. 离线数仓模型构建的简单见解