昨天写了一篇PermissionsDispatcher初探,文章最后说要用java重写processor模块,今天花了半天时间完成,现在把代码放在github上:https://github.com/ileelay/PermissionsDispatcher/tree/2.2.0j,欢迎大家纠正!同时感慨到Kotlin太强大,Java太繁琐;

虽然Kotlin语法很简练,终究还是基于JVM,同时这篇文章不是循序渐进的Kotlin语法讲解,只是为了记录在转PermissionsDispatcher时的粗略见解;

普通class

kotlin是这样子写的

class NoParametersAllowedException(e: ExecutableElement) : RuntimeException("Method '${e.simpleString()}()' must not have any parameters")

为了保持参数一致,我用java是这样写的:

public class NoParametersAllowedException extends RuntimeException {

public static RuntimeException getInstance(ExecutableElement e) {

return new NoParametersAllowedException("Method "+e.getSimpleName().toString()+" must not have any parameters");

}

private NoParametersAllowedException(String s) {

super(s);

}

}

常量的定义

kotlin这样

//Constants.kt

val FILE_COMMENT = "This file was generated by PermissionsDispatcher. Do not modify!"

val GEN_CLASS_SUFFIX = "PermissionsDispatcher"

val GEN_REQUESTCODE_PREFIX = "REQUEST_"

val GEN_PERMISSION_PREFIX = "PERMISSION_"

val GEN_PENDING_PREFIX = "PENDING_"

val GEN_WITHCHECK_SUFFIX = "WithCheck"

val GEN_PERMISSIONREQUEST_SUFFIX = "PermissionRequest"

说实话,kotlin这样写好变态,连class关键字都不用声明,我用java也尽量保持简洁,可还是比不过它;

public interface Constants {

String FILE_COMMENT = "This file was generated by PermissionsDispatcher. Do not modify!";

String GEN_CLASS_SUFFIX = "PermissionsDispatcher";

String GEN_REQUESTCODE_PREFIX = "REQUEST_";

String GEN_PERMISSION_PREFIX = "PERMISSION_";

String GEN_PENDING_PREFIX = "PENDING_";

String GEN_WITHCHECK_SUFFIX = "WithCheck";

String GEN_PERMISSIONREQUEST_SUFFIX = "PermissionRequest";

}

Extensions

//Extensions.kt

fun TypeMirror.simpleString(): String {

val toString: String = this.toString()

val indexOfDot: Int = toString.lastIndexOf('.')

return if (indexOfDot == -1) toString else toString.substring(indexOfDot + 1)

}

//调用

typeMirror.simpleString()

这个用java写就比较尴尬了,我是用工具类,功能可以实现,但还是没法保持统一的调用方式;

//Extensions.java

public static String TypeMirrorSimpleString(TypeMirror typeMirror) {

String toString = typeMirror.toString();

int indexOfDot = toString.lastIndexOf('.');

if (indexOfDot == -1)

return toString;

else

return toString.substring(indexOfDot + 1);

}

//调用

Extensions.TypeMirrorSimpleString(typeMirror);

初始化一个List

processorUnits = listOf(ActivityProcessorUnit(),SupportFragmentProcessorUnit(),NativeFragmentProcessorUnit())

用java咋写,尴尬了

processorUnits = new ArrayList();

processorUnits.add(new ActivityProcessorUnit());

processorUnits.add(new SupportFragmentProcessorUnit());

processorUnits.add(new NativeFragmentProcessorUnit());

Safe Call (?. ?:)

先看这一段懵逼的代码

//ADD_WITH_CHECK_BODY_MAP是一个HashMap

ADD_WITH_CHECK_BODY_MAP[needsPermissionParameter]?.addHasSelfPermissionsCondition(builder, activityVar, permissionField) ?: builder.beginControlFlow("if (\$T.hasSelfPermissions(\$N, \$N))", PERMISSION_UTILS, activityVar, permissionField)

用Java理解是啥样子

SensitivePermissionInterface anInterface = ADD_WITH_CHECK_BODY_MAP.get(needsPermissionParameter);

if (anInterface != null) {

anInterface.addHasSelfPermissionsCondition(builder, activityVar, permissionField);

} else {

builder.beginControlFlow("if ($T.hasSelfPermissions($N, $N))", PERMISSION_UTILS, activityVar, permissionField);

}

未完待续

kotlin在线转java_Kotlin转Java记录相关推荐

  1. 视频教程-项目2——在线无忧库存预警系统-Java

    项目2--在线无忧库存预警系统 丰富的JAVAEE项目和Android应用开发经验.曾参与<中国轴承交易平台>.<25小时在线教育平台>等项目,同时负责多企业的内训课程的研发与 ...

  2. 基于SSH的在线音乐点评网站-java在线音乐点评网站

    基于SSH的在线音乐点评网站-java在线音乐点评网站 开发环境:Eclipse for J2EE,MYSQL5.1,JDK1.7,Tomcat 7 首页主要展示一些最新的音乐专辑. (1)用户注册: ...

  3. java的时间变化_通过java记录数据持续变化时间代码解析

    这篇文章主要介绍了通过java记录数据持续变化时间代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.需求:获取count为null和不为n ...

  4. java记录类型_Java中的记录类型

    java记录类型 于2020年3月发布的JDK 14引入了记录 (预览语言功能),该记录提供了一种紧凑的语法来声明主要用于保存数据的类. 在记录中 ,所有低级,重复且容易出错的代码都类似于构造函数,访 ...

  5. java记录目录树_Java记录

    java记录目录树 https://openjdk.java.net/jeps/359概述了Java的新功能,该功能可能会/将在某些将来的Java版本中实现. JEP建议使用一种新的"类别& ...

  6. java10个基础错误_我们处理了10亿个Java记录的错误-这是导致97%的错误的原因

    java10个基础错误 97%的记录错误是由10个唯一错误引起的 在2016年,一件事在30年内没有改变. 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除. 由于某些未知原因,我们隐式信任日志 ...

  7. 我们处理了10亿个Java记录的错误-这是导致97%的错误的原因

    97%的记录错误是由10个唯一错误引起的 在2016年,一件事已经30年没有改变了. 开发和运营团队仍依靠日志文件对应用程序问题进行故障排除. 由于某些未知原因,我们隐式地信任日志文件,因为我们认为事 ...

  8. java 记录考勤记录_Java中的记录器– Java记录示例

    java 记录考勤记录 Today we will look into Logger in Java. Java Logger provides logging in java programming ...

  9. Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...

  10. 数据库Java项目:在线租房出租房屋系统(java+springboot+maven+mysql)

    数据库Java项目:在线租房出租房屋系统(java+springboot+maven+mysql) 主要实现了客户在线租房及房东发布出租等基本操作流程的全部功能,系统分普通用户.房东.管理员等角色,除 ...

最新文章

  1. HDU1201 18岁生日【日期计算】
  2. 零基础学python-3.2 变量赋值
  3. 用Java创建JMeter变量 - 终极指南
  4. Ubuntu上安装TensorFlow(python2.7版)
  5. 勿谈大,且看Bloomberg的中数据处理平台
  6. 分析大咖说 | 广告流量太烧钱?谨防“奥斯卡影帝”
  7. 软件测试需求人才越来越多
  8. mysql有子查询么_sql-带有子查询的mysql更新查询
  9. [原][osg]Geometry详解
  10. Flex中Image加载图片出错显示默认图片
  11. 通达oa 2013 php解密,通达OA漏洞学习 - 安全先师的个人空间 - OSCHINA - 中文开源技术交流社区...
  12. 实现了一个跨平台的 YUV 文件图片查看器
  13. 禁用win10 1903 wifi诊断
  14. 【百科】喜马诺变速器
  15. 会心自选-淘宝店铺装修和转化率的关系
  16. Oracle 数据库备份脚本
  17. “知识共享”早期版本是什么样子?
  18. Halide(win10vs2019环境搭建)小试牛刀
  19. 什么是云连接?云学院带你了解华为云连接知识
  20. 【测评】抗原乳化方法学评测:去离子水乳化、机械乳化法、PBS 缓冲液乳化..

热门文章

  1. 远程调试云端php,Vim XDebug调试PHP php远程调试
  2. java多线程 信号量(Semaphore),死锁
  3. MySQL 索引分析
  4. poj——3349 哈希加模拟
  5. DigitalOcean发布弹性块存储服务
  6. Android中的GraphicBuffer同步机制-Fence
  7. 图文并茂超详细搭建memcache缓存服务器(nginx+php+memcache+mysql)
  8. 4.4 Hibernate高级功能
  9. man ifconfig时提示:-bash: man: command not found
  10. 【linux】ubuntu更改mysql数据文件路径