首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从 Java 到 Kotlin,再从 Kotlin 回归 Java

这是 Kotlin感到最大惊喜的地方。看看这个函数: ? 当你调用 inc(1) 的时候会输出什么呢?在 Kotlin 中方法参数是一个值,所以你不能改变 num 参数。...故意说曾经是,因为——有个好消息——Java10 已经有这个功能了,并且Java10现在已经可以使用了。 Java10 的类型涂端: ?...一个 Java 程序员来到 Kotlin 阵营。 “嗨,Kotlin是新来的,有静态成员可用?”他问。 “没有。是面向对象的,而静态成员不是面向对象的,” Kotlin回答。...明白?这很简单。” 很喜欢对象声明的概念——单例是种很有用的模式。从从语言中去掉静态成员就不太现实了。我们在Java已经使用了若干年的静态日志记录器,这是非常经典的模式。...Kotlin 把 extends 关键字改为 : 运算符,而这个运算符已经用于分隔变量名及其类型。这是想回归 C++ 语法?对于我来说,这让人感到困惑。 这里最具争议的话题是默认封闭。

1.8K40

介绍Kotlin第二部分(翻译篇)

然而,Kotlin提供了大部分你可能想得到的扩展,让我们一起来看看吧。...Kotlin系列的编程除了默认的不变性外,还来自于Kotlin stdlib的扩展功能。如果您熟悉函数式编程,那么您将熟悉大部分功能。它们是一组辅助函数和更高级的辅助函数,可以为您的集合提供常用操作。...下一个例子进一步说明,甚至可以省略参数定义。在Kotlin默认情况下,一个参数lambdas会接收到一个名为it的参数名。没有必要去命名它。...无效性的共同点是问号;可空变量和函数参数用问号定义。这个问号在Kotlin的null safe起着重要的作用。如果Kotlin编译器在变量声明或函数参数/返回类型中看到这个问号,它将强制您对空检查。...在Kotlin类型推断是非常好的,编译器在编写代码时给出了很多有用的提示。当您需要检查对象是否是某种类型时,您可以使用is关键字。

95440
您找到你想要的搜索结果了吗?
是的
没有找到

kotlin和java语言_希望Java可以从Kotlin语言中窃取的10个功能

在围绕Kotlin 1.0的发行大肆宣传之后,让我们认真看一下我们也应该在Java拥有的一些Kotlin语言功能。     在本文中,不会希望有独角兽。...)) : Stream   当只有一个默认参数时,这种优势不会立即显现出来。...哎呀,此功能是每天在PL / SQL中使用的功能。 当然, 在Java,您可以通过传递参数object来解决此限制 。    ...不知道是否存在JLS /解析器限制,这将永远使我们陷入语句和表达式之间史前区分的痛苦之中。     在某个时间点上,人们开始对产生副作用的事物使用语句,而对更具功能性的事物使用表达式。...当然, default这种不规则用法很奇怪,因为默认情况下Java 8没有重复使用它,但是想Java总是需要额外的语法,以便开发人员可以更好地感觉自己的打字手指,使他们活着。 没关系。

1.1K00

【翻译】Kotlin致简代码之路

而且,我们应该从主要逻辑辨别出细节。 Kotlin 可以帮我们做到这点?不行,因为这些规则是无关于语言的。这仍然取决于开发者自己来创建小的函数。...然而,使用 Java 有时候很难写出小而富有表达力的函数。让来举个例子。假设我们需要把 HTTP 响应的有效信息映射成一个对象并且正确的处理各种错误分类。...此外, Kotlin 支持默认参数(像这样 val width: Int = 0 这样)。这直接淘汰了那种使用冗长而又繁琐的构造函数链来模拟默认参数的古老方式。...详细信息可以参考博客里关于 Kotlin 习惯用法的文章。 局限 良好的设计有益于致简代码 到目前为止,我们只考虑到了 Kotlin 函数和错误处理功能。...这里也要发表自己的意见: 类和方法默认为 final :是的,这种设计意图是在社区引起了激烈的争议。但是对于我来说,这在日常工作并不是什么大问题。

1.4K30

从 Java 到 Kotlin,再从 Kotlin 回归 Java

感觉 —— IDEA 是对的。无法想象存在这种遮蔽了方法参数的有效用例。 类型推断 在 Kotlin ,当你申明一个 var 或者 val 时,你通常让编译器从右边的表达式类型猜测变量类型。...不知道。不过知道这会加大使用Kotlin的难度。 第二个问题。在阅读一个方法声明的时候,你最先想知道的应该是方法的名称和返回类型,然后才会去了解参数。...明白?这很简单。” 很喜欢对象声明的概念——单例是种很有用的模式。从从语言中去掉静态成员就不太现实了。我们在Java已经使用了若干年的静态日志记录器,这是非常经典的模式。...开放(Open)类 Kotlin 的类默认是封闭(final)的。...这是想回归 C++ 语法?对于我来说,这让人感到困惑。 这里最具争议的话题是默认封闭。可能是因为 Java 程序员过度使用了继承,可能你应该在允许类被继承之前想想清楚。

1.5K10

31 天,从浅到深轻松学习 Kotlin

Day 6:属性 在 Kotlin ,类可以具有可变和只读属性,默认情况下生成 getter 和 setter。如果需要,您也可以实现自定义的。...Day 12:默认参数 方法参数的数量是否太多?在函数中指定默认参数值。使用命名参数使代码更具可读性。...第二周学习小结: 这周我们更深入学了 Kotlin 的特性:简洁 bundle,迭代,Data,postDelay,默认参数,序列化。...Day 18:要求 (require) 和检查 (check) 您方法的参数是有效的?...通过 Kotlin,您可以实现自己的操作符。 Day 21:顶级方法和参数 类的实用方法?将它们添加到源文件的顶层。在 Java ,它们被编译为该类的静态方法。 您是否为您的类定义了静态常量?

2.2K30

Kotlin Android】一个列表带你领略Kotlin简洁之风

对于Kotlin一开始也是没有多大的兴趣,对函数式编程也是有一定排斥的,总感觉代码可读性和可维护性似乎大大下降,事实上只是对这编程思想没有一个很好的转变而已。...Kotlin 类声明、定义、继承 Kotlin同样使用class来声明类,类继承符号为一个冒号“:”,基类需要在类名后面带上一对括号,如果基类构造函数带有参数,此时需要在括号填写对应的参数。...,默认可以省略不写,如果类的构造函数带有参数,那么可你直接写在默认的构造函数上,或者另外写一个二级构造函数 class A(var arg1: Int, val arg2: String) 或 class...Int类型的参数 2,基类Base中有一个init初始化代码块,可以在里面直接使用构造函数参数来完成数据的初始化 3,子类必须在默认的构造方法初始化基类的参数 4,构造函数名字为constructor...当然Kotlin还有更多的知识和更多使代码更简洁的技巧,如lambda表达式,对象表达式,函数扩展和对象委托等更高级的功能,这里就不在介绍。

1.8K10

Kotlin的面向对象编程,深入讨论继承写法的问题

之所以这么设计,是因为当我们调用了某个类的构造函数时,我们的意图只可能是对这个类进行实例化,因此即使没有new关键字也清晰表达出我们的意图。...第一件事,使Person类可以被继承。这点可能很多人会觉得奇怪,尤其是有Java编程经验的人。一个类本身不就是可以被继承的,为什么还要使Person类可以被继承呢?...这就是Kotlin不同的地方,在Kotlin任何一个非抽象类默认都是不可以被继承的,相当于Java给类声明了final关键字。...Kotlin提供了一个给函数设定参数默认值的功能,基本上可以替代次构造函数的作用。但是考虑到知识结构的完整性,决定还是介绍一下次构造函数的相关知识,顺便探讨一下括号问题在次构造函数上的区别。...第二个次构造函数不接收任何参数,它通过this关键字调用了我们刚才定义的第一个次构造函数,并将name和age参数也赋值成初始值,由于第二个次构造函数间接调用了主构造函数,因此这仍然是合法的。

82030

Kotlin入门(12)类的概貌与构造

new; 既然Kotlin把init当作初始化函数,那么是否意味着,构造函数参数应该添加在init名称后面?...2、二级构造函数需要调用主构造函数,“this(context, name)”这句代码在Java要写在函数体内部,在Kotlin则以冒号开头补充到输入参数后面,这意味着二级构造函数实际上是从主构造函数扩展而来...不知读者是否还记得前面介绍函数时说到的默认参数?类的构造函数同样也添加默认参数。...下面即为采取默认参数的类定义代码: //类的主构造函数使用了默认参数 class AnimalDefault (context: Context, name:String, sex:Int = 0)...另外,Kotlin的构造函数也支持默认参数,从而避免了冗余的构造函数定义。 点此查看Kotlin入门教程的完整目录

42320

Kotlin与Java的异同(一)

大家好,又见面了,是你们的朋友全栈君。 本文章只为了方便查阅。 文章目录 Kotlin简介 Kotlin与Java的异同 1.函数 2....命名参数 默认参数 静态工具类 顶层函数(静态函数) 顶层属性(静态变量) 9.可变参数 10.字符串和正则表达式 ---- Kotlin简介 Kotlin是一种针对Java 平台的新编程语言...Kotlin 支持面向对象和函数式两种编程风格,通过头等函数使更高级别的的抽象成为可能,通过支持不可变值简化了测试和多线程开发。...在 Java 必须显示地处理。必须声明函数抛出的所有受检异常。如果调用另外一个函数,需要处理这个函数的受检异常,或者声明函数抛出这些异常。...,从Java 调用 Kotlin 函数的时候,必须显示地指定所有参数值。

1.7K20

Android Jetpack组件 Compose 使用介绍

. setContent   首先是这个setContent的闭包,包含的是页面的内容,这里我们首先看到的是EasyComposeTheme,表示的是你项目的主题,主题用于设置项目页面的样式,可以看看设置哪些参数...这里把这里的代码注释掉,那么你在AS中就无法预览了,现在我们就了解了MainActivity的基本构建了,那么下面我们再来观察一下gradle。...② 大小设置 作为开发者要学会多尝试,比如我们再改一下这个图片的参数,现在我们的图片是没有设置大小的,目前是默认大小,现在我们设置一下大小为60dp: ③ 图片设置 正方形图片不好看,下面我们改成圆的...然后得到name,将name传入Greeting,函数这样就可以了,那么我们再定义一个数据列表。...这个演示效果在预览是看不出来的,我们用真机来看一下: 从上面这个图来看,你会发现点击有默认的水波纹效果,这一点很好,还有就是点击的区域是包裹你当前这个item的内容,而不是占满屏幕宽度。

2.6K20

Kotlin 初体验:主要特征与应用

在创建“人”的列表时,你省略了Alice的年龄,所以这里年龄使用了默认值null。然后你调用了maxBy函数来查找列表中年纪最大的那个“人”。...传递给这个函数的lambda表达式需要一个参数,使用it作为这个参数默认名称。如果age属性为null,Elvis运算符(?:)会返回零。...工具支持——静态类型使 IDE 提供可靠的重构、精确的代码补全以及其他 特性。...可以轻易地将这段逻辑公 共的部分提取到一个函数,并将其他不同的部分作为参数传递给它。这些参数本身也是函数,但你可以使用一种简洁的语法来表示这些匿名函数,它被称作 lambda 表达式 : ?...大部分Java中会导致NullPointerException的代码在Kotlin无法编译成功,以确保这些错误在应用到达用户手中之前得到修正。

83630

Kotlin 1.2 的新增了哪些特性?

其他语言特性 注解的数组常量 从 Kotlin 1.2 开始,注解的数组参数可以使用新的数组常量语法而不是 arrayOf 函数来传递: ? 数组常量语法被限制为注释参数。...JVM 带默认函数参数的内联函数 内联函数现在允许其内联函数参数具有默认值: ?...破坏性变更:try 块后面的 sound smart casts 早些时候,Kotlin 使用了 try 块的赋值,以在块之后进行 smart casts,这可能会破坏类型及 null 值的安全性并导致运行时失败...弃用:数据类的覆写性拷贝 当从已经具有相同签名的拷贝函数的类型派生数据类时,为数据类生成的 copy 实现使用父类型的默认函数,会导致出现与预期相反的行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突的继承已经被...后话 看了这么多的改变,我们是否就可以深入的学习Kotlin语言,不妨看看这边文章:Kotlin真的值得学习? 作者:OSC - 协作翻译。

2.8K10

lambda表达式杂谈

于是,要把一个函数参数传递, 只能传递一个类实例,这个类再带上这个函数。 代码像这个样子 或者这样 原本几行代码可以搞定的事情却被写成了十几行,而且全是毫无意义的仪式性代码。...怪不得人家常说java是用来写大型软件的,尼玛,几行代码硬生生被写成了几十行,这种写法能不大型 后来的java8支持lambda表达式,改善了这个问题,使java代码简洁了不少,但是那已经是java的第一个版本发布...说到这里,不得不提一下我们亲爱的世界上最好的语言php,php有匿名函数,但是这个匿名函数算不算lambda表达式呢?从广义的角度去理解,应该算,因为匿名函数和lambda表达式实现同样的功能。...php的匿名函数默认是无法访问匿名函数自身作用域除this关键字引用的类实例以外的变量的,从上面的示例来说, 如果不使用use关键字,匿名函数的代码将无法访问$data变量。...用了use关键字,我们一眼就能看出这个匿名函数用了哪些外部变量,这对代码的可维护性起到一定的正面作用。不过就个人来讲,还是非常讨厌这个关键字的,要的是方便,可维护性什么的, 一边玩去。

62140

来来来,快来围观那个Kotlin

都惊了。 kotlin来了,就因为Google背书了一哈,你们就无条件的沸腾了。 这年头出来了所谓语言还少? 三天两头搞些新花样。...一双塑料凉鞋如今怎么变得这么贵,这不是就是小时候穿过的那种凉鞋? 说好的现代风呢。怎么现在开始穿软料裤了? 这不是小时候我妈穿的那种软料裤嘛。 你们还穿喇叭裤。...(3)、构造函数什么的直接加在类后边。 (4)、别写getter、setter了,自动为你生成。 (5)、属性。你也许纳闷,不是说好的val,怎么又变成var了。...这个很明显是传默认值的。就这么简单粗暴。 至于其他的if else for 等等基本语法,相信你通过cv大法搞一次基本就可以熟练使用了。这年头,你写的各种语言的helloworld还少。...我们再来看看pom的依赖吧。

1.2K110

Java 已老,Kotlin 或将取而代之?

还可以对data类使用对象解构,将对象属性保存到变量。 可以避免Builder类和冗余的方法重载 Kotlin支持方法的命名参数,因此在大多数情况下无需再创建Builder类。...此外,Kotlin还支持默认方法参数,因此无需再为传递默认值而重载方法。...但在Kotlin更简单,甚至对于非builder类也一样。 Kotlin还提供了apply这个扩展函数,能够实现相同的功能。...创建静态函数无需再使用类 Kotlin支持类之外的函数,因此创建静态工具函数无需再创建类。...但在Kotlin直接修改lambda的非final变量。 延迟加载不再困难 Kotlin提供了非常简单的方法,只需指定lazy关键字,就可以推迟属性的初始化。

1.7K30

号称取代 Java 的 Kotlin 语言到底是什么鬼?

Kotlin , 方法的参数无法修改,因此在本例你不能改变 num。这个设计很好,因为你不应该改变方法的输入参数。但是你可以用相同的名称定义另一个变量并对其进行初始化。...从个人角度赞成 IDEA 的做法因为想不到有哪些应用场景需要遮蔽方法参数。 类型推断 在Kotlin,当你声明一个var或是val,你通常会让编译器从右边的表达式类型猜测变量类型。...把你的 logger 放在伴生对象。”Kotlin解释说。 “懂了。这样对?”...但为什么一直没有得到广泛使用呢?令人失望。 Maybe 函数式语言(比如 Haskell)没有空值。...我们投入时间,新技术让我们得到回报。但我并不是说 Kotlin 是一种糟糕的语言,只是在我们的案例,成本远超收益。

2.2K50

Kotlin —— 这次入门就不用放弃了

但是就如其他很多现代的语言那样,它使用了很多函数式编程的概念,比如,使用lambda表达式来更方便地解决问题。其中一个很棒的特性就是Collections的处理方式。稍后会进行介绍。...此处duration已经赋了默认值,所以这个参数可传可不传。...那么哪个方法调用了它,参数的类型都是确定的。也就不需要传入Class了 7....列举了一些不喜欢的部分。 1. 没有命名空间 Kotlin 允许你在文件定义顶级的函数和属性,但是这会带来困扰——所有从 Kotlin 引用的顶级声明无法区分。...那当我每调用一个函数(不管是标准库函数,第三方库函数,还是队友写的函数,甚至自己写的函数),都会疑惑这个函数是否会抛出异常。

1.6K30

【翻译】17位谷歌专家称号大牛如何看待Kotlin

只是问了他们一点点关于 Kotlin 的信息,以及他们是怎样看待 Kotlin 的。毫无疑问,并没有对他们的看法做过任何修改,因此在文章同时看到有支持和反对(或许并非如此)两种声音。...得益于与 Java 的互操作性,一旦遇到任何 Kotlin 不能解决的问题,都能回滚到 Java 解决。 这门语言最强大的,说来也是简单的一个特性是函数扩展功能,它确实简化了的工作流程。...—— 函数式编程:对的, Kotlin 是支持函数式编程的,和 Scala 一样。 —— 默认值和命名参数:这又是那些你如果不去尝试,你就根本不知道你会错过的东西。...在 Kotlin 你可以为函数参数设置默认值,同时给每个参数一个命名。这让代码的易读性和可读性呈指数级地提升。 —— 智能转换:是不是对先用 instanceof 然后再做转换的做法累觉不爱了?...像 PHP 这种世界级流行语言,它能做所有的事情,能写类、扩展接口、能写出优雅的函数、能够不断更新、可以写界面也可以写后面,泡妞,下饭,还能够带你上天堂。

1.1K50
领券