我正在参加「掘金·启航计划」 从今以后,只要谁说Java不能多继承 我都会说,是的没错(秒怂) 要不你再看看标题写了啥?...没毛病啊,你说Java不能多继承,我也说Java不能多继承 这不是巧了么,没想到我们对一件事物的看法竟如此一致,看来这就是猿粪啊 此继承非彼继承 那你这又是唱哪出? 直接上图!...然后就可以在process方法中添加自己的逻辑了,第一个参数Set<?...【目标类】,把注解上标记的类叫做【来源类】,我们要将【来源类】中的字段和方法复制到【目标类】中 我们只要拿到【来源类】的语法树,就可以获得对应的字段和方法然后添加到【目标类】的语法树中 先通过【目标类】...获得类上的注解然后筛选出我们需要的注解,这里我的注解因为支持了@Repeatable,所以还要多解析一步 //获得类上所有的注解 List<?
前言 " 在看完 IDEA 插件开发简易教程后,小伙伴们是否迫不及待的想自己上手整一个插件了?心里规划好了一二三,但是却不知道从哪里开始下手。下面我分享下自己整理的一些常用的 API。...PsiClass为java类或者接口 @Nullable protected PsiClass getTargetClass(Editor editor, PsiFile file) { int...null : target; } } PsiClass操作API 源码有注释且比较清楚,此处仅记录我用到的一部分 // 获取全类名 String qualifiedName = aClass.getQualifiedName...和PsiField都实现了PsiElement // 删除 element.delete() // 添加元素, 向一个类中添加方法, 字段等, 也可以调用 addBefore, addAfter add...通知 在操作成功之后,在 IDEA 右下角通知用户,使用 NotificationGroup 类即可。
前言 " 大家都经常使用 IDEA 进行开发,肯定会使用一些 IDEA 插件,我之前也写过两个插件,不过已经很久没有更新了,就让它先放着吧!...注:模版生成的项目是使用的 Kotlin ,所以这里使用的第一种方式创建。...= null) { // 当前类 PsiClass target = PsiTreeUtil.getParentOfType(element, PsiClass.class...其中格式化自定义了缩进。...其实就是在写文档,或者接口调用的时候,直接将 Java Bean 复制为 Json 串,省过一个一个敲,然后手写 Json 了。
最终效果 五、扩展接口 六、总结 一、前言 给你机会,你也不中用啊 这些年从事编程开发以来,我好像发现了大部分研发那些不愿意干的事,都成就了别人。...通过 PsiClass 获取光标位置对应的 Class 类信息,在通过 psiClass.getMethods() 读取对象方法,把 set 方法过滤出来,封装到集合中。...五、扩展接口 获取当前编辑的文件, 通过PsiFile可获得PsiClass, PsiField等 PsiFile psiFile = e.getData(LangDataKeys.PSI_FILE...在给对象生成 x.set(y.get) 的时候,我也在思考该怎么更合理的把转换对象代入到插件的代码逻辑中,可能会想到是通过弹窗配置或者代码扫描到上一行,但这样的方式终究是不舒服的,考虑到实际自己编码的习惯操作...你好,我是小傅哥。一线互联网java 工程师、架构师,开发过交易&营销、写过运营&活动、设计过中间件也倒腾过中继器、IO板卡。不只是写Java语言,也搞过C#、PHP,是一个技术活跃的折腾者。
在 2011 年发布后,Kotlin 花了一年时间实现了开源,又花了四年时间才在2016年1.0版本中实现了稳定。...InfoQ: Kotlin 很快就取得了巨大的成功,最引人注目的是在 Android 平台上,它几乎取代了 Java。你怎么看待这些?...自 2016 年 Kotlin 稳定发布以来,团队非常重视向后兼容性,这也是 Kotlin 真正增长和采用的开始。这是 Kotlin 之所以获得成功的第二部分。...这就是为什么 Kotlin 设计优先考虑并将继续优先考虑与现有 Java 代码和库的良好互操作性。我们高兴地看到我们的努力得到了回报。...Elizarov: Java 的“一次编写,到处运行”的思想在服务器端取得了成功,但在前端——无论是 Web 端还是移动设备端——都没有成功。有太多特定于平台的东西是 Java 太慢而无法适应的。
我在1月写过一篇文章为什么我会选择Vertx与Kotlin讲述了自己当时选择它们的心路历程,末尾我会附上文章链接 相知,在实际项目中的应用 在2月初时就完成myddd-vertx的雏形,于是在年初给自己定的...有一种耳听为虚,眼见为实的感觉 题外话: 关于性能测试这个事,我也有一些感触,因为感觉这个事首先在开发人员中不普遍,甚至我认定大多数公司可能从上到下都不太重视这个事情。...在对数据库写入做性能测试中,我使用了自己的myddd-backend框架(基于Java及Spring Boot的领域驱动框架)写了一个一模一样的数据写入业务,表结构,API请求,响应都一模一样。...(120万) TPS/秒:4019 平均响应时间:484 成功率:100% ---- 省略了中间一些数据,因为大致差不多,性能测试的过程中并发数从小到大增加,但其TPS与平均响应时间都在稳定的范围内。...我相信未来很长一段的时间内,我都将与其相伴。 附录 为什么我会选择Vertx与Kotlin
Kotlin 在趋势报告中,Kotlin位于Early Majority 解读 我使用Kotlin比较多,我的myddd-vertx就是基于Kotlin开发的。...但我不确认趋势报告中的主流是否把Android开发给算上了,按我的估计,至少在国内,不算上Android开发,真正用Kotlin取代Java的,应该是极少数。 大多数相信仍然会选择Java。...那自然就会有人想到,为什么不直接存储OO对象,基于OO对象来提供存储及查询的相关功能呢,为什么要把OO对象转为二维的关系去存储呢? 好问题。...Quarkus 报告将Quarkus列为早期流行 解读 前面我也说过,在Java生态中,使用最多的生态就是Spring了,给人的感觉Spring简直一统天下了都快。...但在Java中,同时穿插其它语言编程这种概率也不是太高,所以我认为使用VSC开发Java只会是小众行为。
我故意说曾经是,因为——有个好消息——Java10 已经有这个功能了,并且Java10现在已经可以使用了。 Java10 中的类型涂端: ?...在我看来,Kotlin的类型系统中所有这些类似scala的东西!,?和!!,实在是太复杂了。为什么Kotlin从Java的T类型推断到T!而不是T?呢?...关于相反顺序的第三个问题是限制了IDE的自动完成功能。在标准顺序中,因为是从类型开始,所以很容易找到类型。一旦确定了类型,IDE 就可以根据类型给出一些与之相关的变量名称作为建议。...映射表中的键和值通过 to 运算符关联在一起,这很好,但是为什么不使用大家都熟悉的冒号(:)?真是令人失望! ? Maybe?不 ? 函数式编程语言(比如 Haskell)没有空(null)。...这个局限性不是Kotlin的错。没有办法在不违反Liskov原则的情况下生成正确的基于值的equals()实现。这就是为什么Kotlin不允许Data类继承的原因。 ? 开放(Open)类 ?
写这个话题主要是因为看到一篇文章《淘宝系App图片为什么在北京电信网络加载这么慢?[1]》,文章作者通过 xposed hook 了淘宝的 ALog 日志,最终分析到问题原因。...} } 我们来反编译看下 Release 包: 由于 Release 包的 isDebug 为 false,经过代码优化,LogUtils.i 在判断 log 内容不为空时直接 return 不处理...我们需要的是,在 isDebug 为 false 的时候,调用 LogUtils.i 的地方和 LogUtils.i 这个方法都从 Release 包中消失,这样才能从根本上消除日志。 如何解决?...) { val tag = this::class.java.simpleName Log.e(tag, msg) } } 在 MainActivity 中调用...kotlin inline 可以呢?
我说,这种情况时有发生。 显然,在Java 7中,字符串开关被认为足够通用以修改语言以允许它们。 为什么不使用instanceof开关? ...但是Ceylon具有Java 42之前无法提供的大量功能,我也不希望有独角兽。 我希望有安全调用运算符(还有Elvis运算符,两者稍有不同),也可以用Java实现。...我只是觉得if-else更容易阅读,而且我不明白为什么那应该是一个陈述,而不是一个表达。Heck,在Kotlin中,甚至try是一个表达,而不是一个陈述。...在Java中,这是不可能的,这就是为什么Java新手在Stack Overflow上有一个不计其数的问题 。 我为什么不能... ...毕竟,为什么不呢?
但Kotlin成功的一个主要部分是它与Java的完美互操作。Kotlin很棒,因为引擎盖下,它只是Java。与普通的Java相比,Kotlin没有任何根本的不同。...我要补充一点,Kotlin实际上真的很努力(至少对我来说似乎这样)才能摆脱JVM的束缚。Kotlin Native(LLVM编译)似乎指向了那个方向。...但在这两种情况下,我认为与其他平台的分支是由与Java平台的深厚联系所驱动的,并且这将继续成为其中的佼佼者。 4.Kotlin与Java互操作很好,但并不完美。...在讨论Java时,企业环境会被提及很多,但在非企业环境中也是如此,任何人都在做数据科学。 Python和R可能是数据科学的工作语言,但Java仍然支持数据科学的语言。...10.我认为我们会看到Java逐渐下降是一种非常受欢迎的语言,特别是在普通大学生中 - 我喜欢相信大学已经将Java推向学生很长一段时间了。
不 数据类 开放类 陡峭的学习曲线 名称遮掩 这是 Kotlin 让我感到最大惊喜的地方。...我感觉 —— IDEA 是对的。我无法想象存在这种遮蔽了方法参数的有效用例。 类型推断 在 Kotlin 中,当你申明一个 var 或者 val 时,你通常让编译器从右边的表达式类型中猜测变量类型。...这种奇怪的类型不能用Kotlin来表示,它只能从Java类型推断出来。T!会误导你,因为它放松了对空的限制,并禁用了Kotlin的空值安全限制。...,实在是太复杂了。为什么Kotlin从Java的T类型推断到T!而不是T?呢?似乎Java互操作性破坏了Kotlin的杀手特性——类型推断。看起来您应该显式地声明类型(如T?)...这个局限性不是Kotlin的错。没有办法在不违反Liskov原则的情况下生成正确的基于值的equals()实现。这就是为什么Kotlin不允许Data类继承的原因。
我想我还是通过解释Kotlin语言的好处来开始我的这篇文章吧。 在这一点上,没有人惊讶地看到相同的web应用程序运行于任何设备,任何平台(Android、iOS、 Windows、MacOS…)。...尽管Java解决了设备之间的互操作性问题,但它带来了一系列新的问题,以下便是其中一些: 注意:这些问题虽然在Java 8和9中得到了解决,但在API 24以下的Android SDK中是不可用的,这使得它们实际上无法使用...Binding of manual views:尽管这个问题是针对Android平台的,而不是针对Java的,但它也需要样板代码,以获得对Android视图的引用。...为什么Kotlin 会打破这一切 Java是一种非常冗长的语言,它需要为任何操作编写大量的代码,并生成大量的文件(每个类一个)。第一个问题可能会导致我们代码的维护成本更高,更容易出现错误。...但即便如此,Kotlin还是提供了比Java更容易处理的工具。例如,我们有safe call (?)
最近一段时间在网上发了一套 Kotlin 的入门视频,涵盖了基础语法、面向对象、高阶函数、DSL、协程等比较有特色的知识点,不过有朋友提出了疑问:这门课为什么不专门讲讲泛型、反射和注解呢?...我最早听到这个问题的时候,反应比较懵逼,因为我居然没有感觉到 Kotlin 的反射、泛型特别是注解有专门学习的必要,因为他们跟 Java 实在是太像了。...不过 numbers 中可以添加 Number 类型的对象,所以我添加个 Integer 可以不呢?可以的: numbers.add(1); 那么我要想添加一堆 Integer 呢?...最后再给大家提一个点,现在你们知道为什么 in 表示逆变,out 表示协变了吗? 3. 通配符 在Java 中,当我们不知道泛型具体类型的时候可以用 ?...其他 4.1 Raw 类型 Raw 类型就是对于定义时有泛型参数要求,但在使用时指定泛型参数的情况,这个只在 Java 中有,显然也是为了前向兼容而已。
毫无疑问,Kotlin 目前很受欢迎,业界甚至有人认为其将取代 Java 的霸主地位。它提供了 Null 安全性,从这一点来说它确实比 Java 更好。...Kotlin 无法表示这种奇怪的类型,它只能从 Java 类型推断出来。 它可能会误导你,因为它对空值很宽松,并且会禁用 Kotlin 的 NULL 安全机制。...类名称字面常量 :: class 为你提供了一个 KClass 实例,以便与 Kotlin 自己的反射 API 一起使用,而:: class.java为你提供了用于 Java 反射的常规 Java 类实例...这就是为什么 Kotlin 不允许数据类继承的原因。 我不知道你为什么提出这个问题。如果你需要更复杂的类,你仍然可以创建它们并手动维护它们的 equals、hashCode 等方法。...公开类 作者再次鄙视了,对此我实在无话可说。 陡峭的学习曲线 作者认为学习 Kotlin 很难, 但是我个人并不这么认为。 最后的想法 从作者列举的例子中,我感觉他只是了解语言的表面。
Kotlin具有的很多静态语言特性诸如:类型判断、多范式、扩展函数、模式匹配等等让我无法只作为一个吃瓜群众了,所以稍微花了点时间了解了一下该语言。 ?...Kotlin具有的很多静态语言特性诸如:类型判断、多范式、扩展函数、模式匹配等等让我无法只作为一个吃瓜群众了,所以稍微花了点时间了解了一下该语言。...这个生成的构造函数是合成的,因此不能从 Java 或 Kotlin 中直接调用,但可以使用反射调用。 这样我们就可以使用 Java Persistence API(JPA)实例化 data 类。...讲白了,引入这两个特定的插件的目的就是为了方便我们向写SpringBt代码一样来写Kotlin程序!...lastName=wang 可以看到数据成功被取回: ? ---- 参考文献 《Kotlin极简教程》
Kotlin诞生于2011年,但在去年Google宣布Kotlin成为安卓的官方开发语言之后迅速走红。Kotlin从其他JVM语言中借鉴了大量强大的功能。...同一个对象内的调用序列中,无需再重复类型名 Kotlin提供了with结构以方便反复调用同一个对象的方法,这样就无需每次都指明变量名。Java通常采用builder模式和方法链来实现这一点。...但在Kotlin中更简单,甚至对于非builder类也一样。 Kotlin还提供了apply这个扩展函数,能够实现相同的功能。...但在Kotlin中你能直接修改lambda中的非final变量。 延迟加载不再困难 Kotlin提供了非常简单的方法,只需指定lazy关键字,就可以推迟属性的初始化。...扩展现有的JDK类很容易 Kotlin可以通过非常简单的方式给现有的类增加扩展函数。这是个很强大的功能,利用它可以轻松扩展语言的核心API。 ▌为什么应该使用Kotlin?
这就是Kotlin不同的地方,在Kotlin中任何一个非抽象类默认都是不可以被继承的,相当于Java中给类声明了final关键字。...= 0 } 与Java中不同,Kotlin中继承需要在继承类后面加上一对括号,为什么需要加上括号,这就涉及了Kotlin主构造函数和次构造函数的概念。...这就涉及了Java继承特性中的一个规定,子类中的构造函数必须调用父类中的构造函数,这个规定在Kotlin中也要遵守。...这种情况真的十分少见,但在Kotlin中是允许的。当一个类没有显式地定义主构造函数且定义了次构造函数时,它就是没有主构造函数的。...中,我们使用extends进行继承,使用implements进行接口使用,但在Kotlin中统一使用冒号,中间用逗号进行分隔。
作者 | Ivan Sanchez 译者 | 王者 策划 | 万佳 在使用了 Java 15 年后,我写了第一行 Kotlin 代码,到现在已经差不多 5 年了。...那么,为什么 Java 服务器端开发社区没有更多地采用 Kotlin 呢? 以下是我和我的同事们看到的一些原因。...但是,我也并没有看到哪个 Java 开发者因为使用 Kotlin 而“落后”了。相反,这表明他们一直在寻找适合自己的工具,这是一种积极的特质。...但在此之前,对于 Kotlin 开发者来说,最好的开发体验仍然是使用 JetBrains 产品。 我认为,IntelliJ 已经是一个更好的 Java IDE 了,所以它也值得一试。...一般来说,Java 开发者的薪资是最高的,但在 Kotlin 方面并没有足够的数据来进行比较。
与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。...(以上内容来自于度娘) 二、为什么要学Kotlin 首先放一张kotlin中文站的截图: kotlin中文站的截图.png 瞅见没,简介+安全+互操作性+工具友好性。...另外,在2017 google/IO 大会上,kotlin被扶正成为Android开发的官方语言,在我个人看来,在Android领域取代java只是早晚的事情了。...当 kotlin 取代java的那一天,Google就再也不用和ORACLE 就 java的使用权问题扯皮了。 三、Kotlin编译环境 (一)、kotlin的编译环境有哪些?...,记得选择接受 安装中 安装完成提示重启 kotlin插件安装成功 创建kotlin项目 为项目命名并选择项目存储路径 项目创建成功 创建kotlin文件 输入kotlin文件名称 文件创建完成并输入代码
领取专属 10元无门槛券
手把手带您无忧上云