Kotlin中文文档

Kotlin中文文档

Kotlin中文文档
在线调试

在线调试

Kotlin在线调试工具
开发工具

开发工具

Kotlin开发工具IntelliJ IDEA
技术问答

技术问答

Kotlin技术问答与交流专区

为什么我要改用Kotlin?

技术分享admin 发表了文章 • 0 个评论 • 350 次浏览 • 2018-04-03 15:01 • 来自相关话题

写在前面的话,作为一个不熬夜的人,一觉醒来发现Kotlin成为了Android的官方语言,可谓是大喜过望。为了趁热打铁,我决定提前三天放出原定本周日Release的文章。希望能及时让大家了解一下Kotlin。

相信很多开发人员,尤其是Android开发者都会或多或少听说过Kotlin,当然如果没有听过或者不熟悉也没有关系。因为本篇文章以及博客后期的内容会涉及到很多关于Kotlin的知识分享。

在写这篇文章前的一个多月,Flipboard中国的Android项目确定了正式将Kotlin作为项目开发语言,这就意味着新增的代码文件将以Kotlin代码格式出现,而且同时旧的Java代码也将会陆陆续续翻译成Kotlin代码。在使用Kotlin的这段时间,被它的简洁,高效,快捷等等特点震撼,所以有必要写一篇文章来谈一谈Kotlin的特性,如若能取得推广Kotlin的效果则倍感欣慰。 


Kotlin的“简历”

来自于著名的IDE IntelliJ IDEA(Android Studio基于此开发) 软件开发公司 JetBrains(位于东欧捷克)
起源来自JetBrains的圣彼得堡团队,名称取自圣彼得堡附近的一个小岛(Kotlin Island)
一种基于JVM的静态类型编程语言

来自知名的工具开发商JetBrains,也就决定了Kotlin的基因中必然包含实用与高效等特征。那我们接下来看一看Kotlin的特点,当然这也是我改用Kotlin的重要原因。

语法简单,不啰嗦//variables and constants
var currentVersionCode = 1 //变量当前的版本号,类型Int可以根据值推断出来
var currentVersionName : String = "1.0" //显式标明类型
val APPNAME = "droidyue.com" //常量APPNAME 类型(String)可以根据值推断出来

//methods
fun main(args: Array<String>) {
println(args)
}

// class
class MainActivity : AppCompatActivity() {

}

// data class 自动生成getter,setting,hashcode和equals等方法
data class Book(var name: String, val price: Float, var author: String)

//支持默认参数值,减少方法重载
fun Context.showToast(message: String, duration:Int = Toast.LENGTH_LONG) {
Toast.makeText(this, message, duration).show()
}
Kotlin支持类型推断,没有Java那样的啰嗦。另外用var表示变量,val表示常量更加的简洁方法也很简单,连function都缩写成了fun,平添了几分双关之意。类的继承和实现很简单,使用:即可Kotlin每个句子都不需要加分号(;)
 
空指针安全

空指针(NullPointerException或NPE)是我们使用Java开发程序中最常见的崩溃了。因为在Java中我们不得不写很多防御性的代码,比如这样public void test(String string) {
if (string != null) {
char chars = string.toCharArray();
if (chars.length > 10) {
System.out.println(((Character)chars[10]).hashCode());
}
}
}在Kotlin中空指针异常得到了很好的解决。
在类型上的处理,即在类型后面加上,即表示这个变量或参数以及返回值可以为null,否则不允许为变量参数赋值为null或者返回null对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上,否则编译无法通过。

如下面的代码就是Kotlin实现空指针安全的一个例子,而且相对Java实现而言,简直是一行代码搞定的。fun testNullSafeOperator(string: String?) {
System.out.println(string?.toCharArray()?.getOrNull(10)?.hashCode())
}

testNullSafeOperator(null)
testNullSafeOperator("12345678901")
testNullSafeOperator("123")

//result
null
49
null支持方法扩展
很多时候,Framework提供给我们的API往往都时比较原子的,调用时需要我们进行组合处理,因为就会产生了一些Util类,一个简单的例子,我们想要更快捷的展示Toast信息,在Java中我们可以这样做。public static void longToast(Context context, String message) {
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}但是Kotlin的实现却让人惊奇,我们只需要重写扩展方法就可以了,比如这个longToast方法扩展到所有的Context对象中,如果不去追根溯源,可能无法区分是Framework提供的还是自行扩展的。fun Context.longToast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
applicationContext.longToast("hello world")注意:Kotlin的方法扩展并不是真正修改了对应的类文件,而是在编译器和IDE方面做得处理。使我们看起来像是扩展了方法。
Lambda, 高阶函数,Streams API, 函数式编程支持
所谓的Lambda表达式是匿名函数,这使得我们的代码会更加的简单。比如下面的代码就是lambda的应用。findViewById(R.id.content).setOnClickListener {
Log.d("MainActivity", "$it was clicked")
}所谓的高阶函数就是
可以接受函数作为参数也可以返回函数作为结果
举一个接受函数作为参数的例子。在Android开发中,我们经常使用SharedPreference来存储数据,如果忘记调用apply或者commit则数据修改不能应用。利用Kotlin中的高阶函数的功能,我们能更好的解决这个问题fun SharedPreferences.editor(f: (SharedPreferences.Editor) -> Unit) {
val editor = edit()
f(editor)
editor.apply()
}

//实际调用
PreferenceManager.getDefaultSharedPreferences(this).editor {
it.putBoolean("installed", true)
}当然这上面的例子中我们也同时使用了方法扩展这个特性。

Kotlin支持了Streams API和方法引用,这样函数式编程更加方便。比如下面的代码就是我们结合Jsoup,来抓取某个proxy网站的数据,代码更加简单,实现起来也快速。fun parse(url: String): Unit {
Jsoup.parse(URL(url), PARSE_URL_TIMEOUT).getElementsByClass("table table-sm")
.first().children()
.filter { "tbody".equals(it.tagName().toLowerCase()) }
.flatMap(Element::children).forEach {
trElement ->
ProxyItem().apply {
trElement.children().forEachIndexed { index, element ->
when (index) {
0 -> {
host = element.text().split(":")[0]
port = element.text().split(":")[1].toInt()
}
1 -> protocol = element.text()
5 -> country = element.text()
}
}
}.let(::println)
}
}字符串模板
无论是Java还是Android开发,我们都会用到字符串拼接,比如进行日志输出等等。在Kotlin中,字符串模板是支持的,我们可以很轻松的完成一个字符串数组的组成val book = Book("Thinking In Java", 59.0f, "Unknown")
val extraValue = "extra"
Log.d("MainActivity", "book.name = ${book.name}; book.price=${book.price};extraValue=$extraValue")与Java交互性好
Kotlin和Java都属于基于JVM的编程语言。Kotlin和Java的交互性很好,可以说是无缝连接。这表现在
Kotlin可以自由的引用Java的代码,反之亦然。Kotlin可以现有的全部的Java框架和库Java文件可以很轻松的借助IntelliJ的插件转成kotlin
​Kotlin应用广泛​
 
Kotlin对Android应用开发支持广泛,诸多工具,比如kotterknife(ButterKnife Kotlin版),RxKotlin,Anko等等,当然还有已经存在的很多Java的库都是可以使用的。

除此之外,Kotlin也可以编译成Javascript。最近使用Kotlin写了一段抓取proxy的代码,实现起来非常快捷。甚至比纯JavaScript实现起来要快很多。fun handle(): Unit {
window.onload = {
document.getElementsByClassName("table table-sm").asList().first()
.children.asList().filter { "TBODY".equals(it.tagName.toUpperCase()) }
.flatMap { it.children.asList() }.forEach {
var proxyItem = ProxyItem()
it.children.asList().forEachIndexed { index, element ->
when (index) {
0 -> {
proxyItem.host = element.trimedTextContent()?.split(":")?.get(0) ?: ""
proxyItem.port = element.trimedTextContent()?.split(":")?.get(1)?.trim()?.toInt() ?: -1
}
1 -> proxyItem.protocol = element.trimedTextContent() ?: ""
5 -> proxyItem.country = element.trimedTextContent() ?: ""
}
}.run {
console.info("proxyItem $proxyItem")
}

}
}
}关于性能
Kotlin的执行效率和Java代码的执行效率理论上一致的。有时候Kotlin可能会显得高一些,比如Kotlin提供了方法的inline设置,可以设置某些高频方法进行inline操作,减少了运行时的进栈出栈和保存状态的开销。

读到这里,是不是想要尝试一下Kotlin呢,它简洁的语法,汇集诸多特性,高效率实现等等,已经在国外风生水起,国外的Pintereset, Square, Flipboard等公司已经开始应用到生产中。
关于转向Kotlin
其实,我在做决定之前(当时Kotlin还没有被钦定)也曾有过考虑,是不是选择了Kotlin就意味着放弃Java呢,冷静下来想一想,其实并不是那么回事,因为Kotlin与Java语法太相近,以及在Kotlin中无时无刻不在和Java相关的东西打交道,所以这点顾虑不是问题的。

对于个人的项目来转向Kotlin,通常不是很难的选择,毕竟Kotlin是那么优秀的语言,相信很多人还是愿意尝试并使用这个事半功倍的语言的。

而比较难抉择的情况是如果如何让团队转用Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。而国内团队提高效率的办法通常是增加成员。好在Flipboard 美国团队自2015年(可能更早)就引入了Kotlin,因此中国团队这边选用Kotlin也更加顺水推舟。当然更主要的是目前团队规模不大,成员一致认可Kotlin的优点。

关于团队转用Kotlin的方法,一般比较行得通的办法是自上而下的推行。这就意味着要么直接的技术负责人比较开明要么就是需要有人来不断推介来影响团队。

做个比较现实的比拟,Java就像是一趟从我的家乡保定开往北京西的耗时将近2个小时甚至更长的普通列车,而Kotlin则是那趟仅需40分钟就能到达的高铁。通常的人都会选择高铁,因为它节省了时间和提高了体验。这个时间和体验对应编程中的,我想应该是高效率和高可读性,可维护性的代码。

现在好了,有了Google的支持,Kotlin转Android相信在不久的将来就会全面展开。篡改Python的一句名言“人生苦短,我用Kotlin”,这样一个高效实用的语言应该会被越来越多的团队所接受,并应用到开发生产中。当然也希望在国内环境下大放异彩。
 
转载自:https://blog.csdn.net/androidy ... 57157 查看全部

写在前面的话,作为一个不熬夜的人,一觉醒来发现Kotlin成为了Android的官方语言,可谓是大喜过望。为了趁热打铁,我决定提前三天放出原定本周日Release的文章。希望能及时让大家了解一下Kotlin。

相信很多开发人员,尤其是Android开发者都会或多或少听说过Kotlin,当然如果没有听过或者不熟悉也没有关系。因为本篇文章以及博客后期的内容会涉及到很多关于Kotlin的知识分享。

在写这篇文章前的一个多月,Flipboard中国的Android项目确定了正式将Kotlin作为项目开发语言,这就意味着新增的代码文件将以Kotlin代码格式出现,而且同时旧的Java代码也将会陆陆续续翻译成Kotlin代码。在使用Kotlin的这段时间,被它的简洁,高效,快捷等等特点震撼,所以有必要写一篇文章来谈一谈Kotlin的特性,如若能取得推广Kotlin的效果则倍感欣慰。 


Kotlin的“简历”

来自于著名的IDE IntelliJ IDEA(Android Studio基于此开发) 软件开发公司 JetBrains(位于东欧捷克)
起源来自JetBrains的圣彼得堡团队,名称取自圣彼得堡附近的一个小岛(Kotlin Island)
一种基于JVM的静态类型编程语言

来自知名的工具开发商JetBrains,也就决定了Kotlin的基因中必然包含实用与高效等特征。那我们接下来看一看Kotlin的特点,当然这也是我改用Kotlin的重要原因。

语法简单,不啰嗦
//variables and constants
var currentVersionCode = 1 //变量当前的版本号,类型Int可以根据值推断出来
var currentVersionName : String = "1.0" //显式标明类型
val APPNAME = "droidyue.com" //常量APPNAME 类型(String)可以根据值推断出来

//methods
fun main(args: Array<String>) {
println(args)
}

// class
class MainActivity : AppCompatActivity() {

}

// data class 自动生成getter,setting,hashcode和equals等方法
data class Book(var name: String, val price: Float, var author: String)

//支持默认参数值,减少方法重载
fun Context.showToast(message: String, duration:Int = Toast.LENGTH_LONG) {
Toast.makeText(this, message, duration).show()
}

  • Kotlin支持类型推断,没有Java那样的啰嗦。
  • 另外用var表示变量,val表示常量更加的简洁
  • 方法也很简单,连function都缩写成了fun,平添了几分双关之意。
  • 类的继承和实现很简单,使用:即可
  • Kotlin每个句子都不需要加分号(;)

 
空指针安全

空指针(NullPointerException或NPE)是我们使用Java开发程序中最常见的崩溃了。因为在Java中我们不得不写很多防御性的代码,比如这样
public void test(String string) {
if (string != null) {
char chars = string.toCharArray();
if (chars.length > 10) {
System.out.println(((Character)chars[10]).hashCode());
}
}
}
在Kotlin中空指针异常得到了很好的解决。
  • 在类型上的处理,即在类型后面加上,即表示这个变量或参数以及返回值可以为null,否则不允许为变量参数赋值为null或者返回null
  • 对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上,否则编译无法通过。


如下面的代码就是Kotlin实现空指针安全的一个例子,而且相对Java实现而言,简直是一行代码搞定的。
fun testNullSafeOperator(string: String?) {
System.out.println(string?.toCharArray()?.getOrNull(10)?.hashCode())
}

testNullSafeOperator(null)
testNullSafeOperator("12345678901")
testNullSafeOperator("123")

//result
null
49
null
支持方法扩展
很多时候,Framework提供给我们的API往往都时比较原子的,调用时需要我们进行组合处理,因为就会产生了一些Util类,一个简单的例子,我们想要更快捷的展示Toast信息,在Java中我们可以这样做。
public static void longToast(Context context, String message) {
Toast.makeText(context, message, Toast.LENGTH_LONG).show();
}
但是Kotlin的实现却让人惊奇,我们只需要重写扩展方法就可以了,比如这个longToast方法扩展到所有的Context对象中,如果不去追根溯源,可能无法区分是Framework提供的还是自行扩展的。
fun Context.longToast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_LONG).show()
}
applicationContext.longToast("hello world")
注意:Kotlin的方法扩展并不是真正修改了对应的类文件,而是在编译器和IDE方面做得处理。使我们看起来像是扩展了方法。
Lambda, 高阶函数,Streams API, 函数式编程支持
所谓的Lambda表达式是匿名函数,这使得我们的代码会更加的简单。比如下面的代码就是lambda的应用。
findViewById(R.id.content).setOnClickListener {
Log.d("MainActivity", "$it was clicked")
}
所谓的高阶函数就是
  • 可以接受函数作为参数
  • 也可以返回函数作为结果

举一个接受函数作为参数的例子。在Android开发中,我们经常使用SharedPreference来存储数据,如果忘记调用apply或者commit则数据修改不能应用。利用Kotlin中的高阶函数的功能,我们能更好的解决这个问题
fun SharedPreferences.editor(f: (SharedPreferences.Editor) -> Unit) {
val editor = edit()
f(editor)
editor.apply()
}

//实际调用
PreferenceManager.getDefaultSharedPreferences(this).editor {
it.putBoolean("installed", true)
}
当然这上面的例子中我们也同时使用了方法扩展这个特性。

Kotlin支持了Streams API和方法引用,这样函数式编程更加方便。比如下面的代码就是我们结合Jsoup,来抓取某个proxy网站的数据,代码更加简单,实现起来也快速。
fun parse(url: String): Unit {
Jsoup.parse(URL(url), PARSE_URL_TIMEOUT).getElementsByClass("table table-sm")
.first().children()
.filter { "tbody".equals(it.tagName().toLowerCase()) }
.flatMap(Element::children).forEach {
trElement ->
ProxyItem().apply {
trElement.children().forEachIndexed { index, element ->
when (index) {
0 -> {
host = element.text().split(":")[0]
port = element.text().split(":")[1].toInt()
}
1 -> protocol = element.text()
5 -> country = element.text()
}
}
}.let(::println)
}
}
字符串模板
无论是Java还是Android开发,我们都会用到字符串拼接,比如进行日志输出等等。在Kotlin中,字符串模板是支持的,我们可以很轻松的完成一个字符串数组的组成
val book = Book("Thinking In Java", 59.0f, "Unknown")
val extraValue = "extra"
Log.d("MainActivity", "book.name = ${book.name}; book.price=${book.price};extraValue=$extraValue")
与Java交互性好
Kotlin和Java都属于基于JVM的编程语言。Kotlin和Java的交互性很好,可以说是无缝连接。这表现在
  • Kotlin可以自由的引用Java的代码,反之亦然。
  • Kotlin可以现有的全部的Java框架和库
  • Java文件可以很轻松的借助IntelliJ的插件转成kotlin

​Kotlin应用广泛​
 
Kotlin对Android应用开发支持广泛,诸多工具,比如kotterknife(ButterKnife Kotlin版),RxKotlin,Anko等等,当然还有已经存在的很多Java的库都是可以使用的。

除此之外,Kotlin也可以编译成Javascript。最近使用Kotlin写了一段抓取proxy的代码,实现起来非常快捷。甚至比纯JavaScript实现起来要快很多。
fun handle(): Unit {
window.onload = {
document.getElementsByClassName("table table-sm").asList().first()
.children.asList().filter { "TBODY".equals(it.tagName.toUpperCase()) }
.flatMap { it.children.asList() }.forEach {
var proxyItem = ProxyItem()
it.children.asList().forEachIndexed { index, element ->
when (index) {
0 -> {
proxyItem.host = element.trimedTextContent()?.split(":")?.get(0) ?: ""
proxyItem.port = element.trimedTextContent()?.split(":")?.get(1)?.trim()?.toInt() ?: -1
}
1 -> proxyItem.protocol = element.trimedTextContent() ?: ""
5 -> proxyItem.country = element.trimedTextContent() ?: ""
}
}.run {
console.info("proxyItem $proxyItem")
}

}
}
}
关于性能
Kotlin的执行效率和Java代码的执行效率理论上一致的。有时候Kotlin可能会显得高一些,比如Kotlin提供了方法的inline设置,可以设置某些高频方法进行inline操作,减少了运行时的进栈出栈和保存状态的开销。

读到这里,是不是想要尝试一下Kotlin呢,它简洁的语法,汇集诸多特性,高效率实现等等,已经在国外风生水起,国外的Pintereset, Square, Flipboard等公司已经开始应用到生产中。
关于转向Kotlin
其实,我在做决定之前(当时Kotlin还没有被钦定)也曾有过考虑,是不是选择了Kotlin就意味着放弃Java呢,冷静下来想一想,其实并不是那么回事,因为Kotlin与Java语法太相近,以及在Kotlin中无时无刻不在和Java相关的东西打交道,所以这点顾虑不是问题的。

对于个人的项目来转向Kotlin,通常不是很难的选择,毕竟Kotlin是那么优秀的语言,相信很多人还是愿意尝试并使用这个事半功倍的语言的。

而比较难抉择的情况是如果如何让团队转用Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。而国内团队提高效率的办法通常是增加成员。好在Flipboard 美国团队自2015年(可能更早)就引入了Kotlin,因此中国团队这边选用Kotlin也更加顺水推舟。当然更主要的是目前团队规模不大,成员一致认可Kotlin的优点。

关于团队转用Kotlin的方法,一般比较行得通的办法是自上而下的推行。这就意味着要么直接的技术负责人比较开明要么就是需要有人来不断推介来影响团队。

做个比较现实的比拟,Java就像是一趟从我的家乡保定开往北京西的耗时将近2个小时甚至更长的普通列车,而Kotlin则是那趟仅需40分钟就能到达的高铁。通常的人都会选择高铁,因为它节省了时间和提高了体验。这个时间和体验对应编程中的,我想应该是高效率和高可读性,可维护性的代码。

现在好了,有了Google的支持,Kotlin转Android相信在不久的将来就会全面展开。篡改Python的一句名言“人生苦短,我用Kotlin”,这样一个高效实用的语言应该会被越来越多的团队所接受,并应用到开发生产中。当然也希望在国内环境下大放异彩。
 
转载自:https://blog.csdn.net/androidy ... 57157

Kotlin+SpringBoot服务端restful框架搭建(1)

后台开发Cat 发表了文章 • 0 个评论 • 499 次浏览 • 2018-04-01 15:52 • 来自相关话题

       本文的组要目的是完成SpringBoot集成Kotlin的一个基本项目构建,通过这个例子能够对kotlin有一个简单的了解。与其看着枯燥的教程,看看它的使用也许会更有意思。

kotlin简介
      Kotlin是一个基于JVM的编程语言,由JetBrains设计开发并开源。Kotlin可以编译成Java字节码也可以编译成JavaScript,支持开发Android,并且谷歌已经明确将Kotlin作为Android的一级开发语言。最新的Spring5版本也专门引入了对于Kotlin的支持。Kotlin拥有更简洁的代码,完全兼容java,而且同java可以实现完全的互调。使用Kotlin你起码可以少些30%的代码。
 
要求
JDK 1.8maven构建Spring4IDEA IntellijKotlin 1.2.31
 
快速构建
 
首先构建一个maven项目,我们命名为KotlinDemo。(使用idea构建Kotlin项目需要按照Kotlin的插件。)
1.先来修改pom.xml添加需要使用的依赖。 引入spring-boot-starter-parent,这里使用1.5.6版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>添加需要的依赖
<properties>
<java.version>1.8</java.version>
<mybatis.spring.version>1.2.4</mybatis.spring.version>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<kotlin.version>1.2.31</kotlin.version>
</properties><dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jre8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin.version}</version>
</dependency>
在build中添加插件
 
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>1.2.31</version>
<configuration>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<jvmTarget>1.8</jvmTarget>
</configuration>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>1.2.31</version>
</dependency>
</dependencies>
</plugin>
2.创建application.yml
server:
context-path: /kotlin
port: 80903.创建Application.kt文件
 
       创建类的方法同java相似,也是引入各种包,但是需要注意Kotlin的main方法是class外面和java的main方法区别

        添加spring的注解@RestController和@SpringBootApplication,我们在class里面创建一个简单的restfull格式的请求方法hello(),方法返一个String的字符串。

       添加@RequestMapping时候需要注意设置method的时候,这里method接收的是一个数组,不是RequestMethod.GE,所以我们需要通过kotlin提供的arrayOf()方法转换一个下,这是一个创建数据的方法,具体的可以参考一下kotlin的文档。

       注意一下 SpringApplication.run中参数这个和java的区别有点大
 
Application.kt类代码
 
package demo

import org.springframework.boot.SpringApplication
@RestController
@SpringBootApplication
class Application{

@RequestMapping(value = "/hello",method =arrayOf(RequestMethod.GET))
fun hello(): String {

return "hello kotlin";

}
}

fun main(args: Array<String>){

//::符号是得到这个类的class对象
SpringApplication.run(Application::class.java,*args);

}3.项目基本搭建完成,试试启动项目访问http://localhost:8090/demo/hello,页面会返回hello kotlin。





 
 
  查看全部
       本文的组要目的是完成SpringBoot集成Kotlin的一个基本项目构建,通过这个例子能够对kotlin有一个简单的了解。与其看着枯燥的教程,看看它的使用也许会更有意思。

kotlin简介
      Kotlin是一个基于JVM的编程语言,由JetBrains设计开发并开源。Kotlin可以编译成Java字节码也可以编译成JavaScript,支持开发Android,并且谷歌已经明确将Kotlin作为Android的一级开发语言。最新的Spring5版本也专门引入了对于Kotlin的支持。Kotlin拥有更简洁的代码,完全兼容java,而且同java可以实现完全的互调。使用Kotlin你起码可以少些30%的代码
 
要求
  • JDK 1.8
  • maven构建
  • Spring4
  • IDEA Intellij
  • Kotlin 1.2.31

 
快速构建
 
首先构建一个maven项目,我们命名为KotlinDemo。(使用idea构建Kotlin项目需要按照Kotlin的插件。)
1.先来修改pom.xml添加需要使用的依赖。 引入spring-boot-starter-parent,这里使用1.5.6版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
添加需要的依赖
 <properties>
<java.version>1.8</java.version>
<mybatis.spring.version>1.2.4</mybatis.spring.version>
<kotlin.compiler.incremental>true</kotlin.compiler.incremental>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<kotlin.version>1.2.31</kotlin.version>
</properties>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jre8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin.version}</version>
</dependency>
在build中添加插件
 
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>1.2.31</version>
<configuration>
<compilerPlugins>
<plugin>spring</plugin>
</compilerPlugins>
<jvmTarget>1.8</jvmTarget>
</configuration>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>1.2.31</version>
</dependency>
</dependencies>
</plugin>
2.创建application.yml
server:
context-path: /kotlin
port: 8090
3.创建Application.kt文件
 
       创建类的方法同java相似,也是引入各种包,但是需要注意Kotlin的main方法是class外面和java的main方法区别

        添加spring的注解@RestController和@SpringBootApplication,我们在class里面创建一个简单的restfull格式的请求方法hello(),方法返一个String的字符串。

       添加@RequestMapping时候需要注意设置method的时候,这里method接收的是一个数组,不是RequestMethod.GE,所以我们需要通过kotlin提供的arrayOf()方法转换一个下,这是一个创建数据的方法,具体的可以参考一下kotlin的文档。

       注意一下 SpringApplication.run中参数这个和java的区别有点大
 
Application.kt类代码
 
package demo

import org.springframework.boot.SpringApplication
@RestController
@SpringBootApplication
class Application{

@RequestMapping(value = "/hello",method =arrayOf(RequestMethod.GET))
fun hello(): String {

return "hello kotlin";

}
}

fun main(args: Array<String>){

//::符号是得到这个类的class对象
SpringApplication.run(Application::class.java,*args);

}
3.项目基本搭建完成,试试启动项目访问http://localhost:8090/demo/hello,页面会返回hello kotlin。

a.png

 
 
 

使用Kotlin来开发Android,这些优缺点要考虑

技术分享admin 发表了文章 • 2 个评论 • 412 次浏览 • 2017-09-20 10:31 • 来自相关话题

 
Kotlin 语言说来也不是很新:是在 2011 年推出的,但火起来大家都知道是因为前几个月谷歌在 I / O 2017 上宣布它成为 Android 官方支持开发语言。自此之后,现在,Kotlin 开始出现在各个语言榜单之上,而且由于 JetBrains 和 Google 的企业支持基础,正迅速得到应用。

据 Kotlin 官方网站的信息,包括 Atlassian、Pivotal 、Uber、Pinterest、Evernote 等知名技术公司正在积极地将 Kotlin 用于 Android 应用开发。

如果你也正在考虑加入 Kotlin 的阵容,请确保已了解该技术的好处以及可能存在的陷阱。这里有一些关于 Kotlin 编程语言的见解,可供参考。

[使用Kotlin来开发Android,这些优缺点要考虑]

与已经发布 22 年的 Java 相比,Kotlin 有一些明显的改进:

提高团队的生产力

基于 Java 的 Kotlin 消除了其前身的过时和繁琐。语言紧凑、清晰、高效,语法简洁直观。因此,Kotlin 可以显着提高团队效率:编写和部署新代码所需的时间较少。这也有助于提高代码可维护性。

据 Keepsafe 的 Android 开发人员 A. J. Alt 所表示,将 “App Lock” 应用从 Java 转换为 Kotlin ,总代码量减少了 30% 。

与现有代码兼容

Kotlin 的优点之一是其 100% 的 Java 互操作性。该语言适用于 Java 本身,及所有相关工具和框架,提供了丰富的生态系统。这也使得可以选择逐渐迁移到 Kotlin ,或者在同一个项目中同时使用这两种语言。

可维护性

由 JetBrains 构建并支持,Kotlin 为许多 IDE(包括 Android Studio)提供了良好的支持。

更少的错误

通过更紧凑和更清晰的代码库,Kotlin 允许在生产中减少错误,生成更稳定的代码。编译器在编译时检测所有可能的错误,而不是运行时。这使得 Kotlin 成为比 Java 更安全的替代品。

可靠

不同于 Swift ,Kotlin 是一种更成熟的语言。在 2011 年推出后,在最终的 1.0 版本发布之前,经历了多个 Alfa 和 Beta 阶段。最新版本也与以前的版本反向兼容。

然而,在生产过程中使用 Kotlin 之前,仍需要考虑几个“陷阱”:Kotlin 虽然非常接近 Java ,但在许多方面依然不同。因此,想要切换语言的开发者仍然面临着一定的学习曲线。因此,如果你决定将 Android 开发团队迁移到 Kotlin ,则需要对培训和时间进行额外的投资。 一些使用过 Kotlin 的开发者反映编译速度较慢,这是 Kotlin 的主要缺点之一。不过,在不同的测试环境下结果有所不同:在某些情况下,Kotlin 以编译速度击败 Java ,但有时它又比 Java 慢得多。 虽然 Kotlin 正在迅速成长为 Android 开发的首要语言,但目前仍然只有一个小型的开发者社区。这意味着用于学习该语言的资源有限,并且找出在应用开发过程中可能出现的问题的答案会比较困难。例如,在 StackOverflow 上搜索 Kotlin 仅有 3600 个左右的帖子,而 Java 有超过 1,000,000 个。由于 Kotlin 对大多数开发者来说仍然比较新,可能很难找到有经验的专业人士。

Kotlin VS Java:是时候切换语言了吗?

正如前面所说,这个问题很难回答。虽然 Kotlin 在某些方面显然优于 Java ,但仍远未完美。 如果你想尝试 Kotlin ,建议雇用一个专门的开发者,或让你的部分团队成员去尝试这种语言。即使它不会对你的应用的性能或其 UI 带来实际的结果,但也不会对其造成任何伤害。 查看全部

 
Kotlin 语言说来也不是很新:是在 2011 年推出的,但火起来大家都知道是因为前几个月谷歌在 I / O 2017 上宣布它成为 Android 官方支持开发语言。自此之后,现在,Kotlin 开始出现在各个语言榜单之上,而且由于 JetBrains 和 Google 的企业支持基础,正迅速得到应用。

据 Kotlin 官方网站的信息,包括 Atlassian、Pivotal 、Uber、Pinterest、Evernote 等知名技术公司正在积极地将 Kotlin 用于 Android 应用开发。

如果你也正在考虑加入 Kotlin 的阵容,请确保已了解该技术的好处以及可能存在的陷阱。这里有一些关于 Kotlin 编程语言的见解,可供参考。

[使用Kotlin来开发Android,这些优缺点要考虑]

与已经发布 22 年的 Java 相比,Kotlin 有一些明显的改进:

提高团队的生产力

基于 Java 的 Kotlin 消除了其前身的过时和繁琐。语言紧凑、清晰、高效,语法简洁直观。因此,Kotlin 可以显着提高团队效率:编写和部署新代码所需的时间较少。这也有助于提高代码可维护性。

据 Keepsafe 的 Android 开发人员 A. J. Alt 所表示,将 “App Lock” 应用从 Java 转换为 Kotlin ,总代码量减少了 30% 。

与现有代码兼容

Kotlin 的优点之一是其 100% 的 Java 互操作性。该语言适用于 Java 本身,及所有相关工具和框架,提供了丰富的生态系统。这也使得可以选择逐渐迁移到 Kotlin ,或者在同一个项目中同时使用这两种语言。

可维护性

由 JetBrains 构建并支持,Kotlin 为许多 IDE(包括 Android Studio)提供了良好的支持。

更少的错误

通过更紧凑和更清晰的代码库,Kotlin 允许在生产中减少错误,生成更稳定的代码。编译器在编译时检测所有可能的错误,而不是运行时。这使得 Kotlin 成为比 Java 更安全的替代品。

可靠

不同于 Swift ,Kotlin 是一种更成熟的语言。在 2011 年推出后,在最终的 1.0 版本发布之前,经历了多个 Alfa 和 Beta 阶段。最新版本也与以前的版本反向兼容。

然而,在生产过程中使用 Kotlin 之前,仍需要考虑几个“陷阱”:Kotlin 虽然非常接近 Java ,但在许多方面依然不同。因此,想要切换语言的开发者仍然面临着一定的学习曲线。因此,如果你决定将 Android 开发团队迁移到 Kotlin ,则需要对培训和时间进行额外的投资。 一些使用过 Kotlin 的开发者反映编译速度较慢,这是 Kotlin 的主要缺点之一。不过,在不同的测试环境下结果有所不同:在某些情况下,Kotlin 以编译速度击败 Java ,但有时它又比 Java 慢得多。 虽然 Kotlin 正在迅速成长为 Android 开发的首要语言,但目前仍然只有一个小型的开发者社区。这意味着用于学习该语言的资源有限,并且找出在应用开发过程中可能出现的问题的答案会比较困难。例如,在 StackOverflow 上搜索 Kotlin 仅有 3600 个左右的帖子,而 Java 有超过 1,000,000 个。由于 Kotlin 对大多数开发者来说仍然比较新,可能很难找到有经验的专业人士。

Kotlin VS Java:是时候切换语言了吗?

正如前面所说,这个问题很难回答。虽然 Kotlin 在某些方面显然优于 Java ,但仍远未完美。 如果你想尝试 Kotlin ,建议雇用一个专门的开发者,或让你的部分团队成员去尝试这种语言。即使它不会对你的应用的性能或其 UI 带来实际的结果,但也不会对其造成任何伤害。

手把手教你使用Kotlin Native无服务器功能!

技术分享admin 发表了文章 • 2 个评论 • 383 次浏览 • 2017-09-20 10:28 • 来自相关话题

手把手教你使用Kotlin Native无服务器功能! 查看全部

Kotlin学习系列(二)

技术分享admin 发表了文章 • 0 个评论 • 325 次浏览 • 2017-05-23 21:39 • 来自相关话题

IF表达式
if在kotlin可以当做表达式使用跟java的三元操作符类似:
var max = if( a > b ) a else bif分支可以使用代码块,最后一个表达式是返回值:
var max = if (a > b){
print(a)
a
}else{
print(b)
b
}When表达式
kotlin使用when来替换switch语句,基本特性都跟switch差不多会对列出来的分支进行匹配满足条件的分支会被执行。when可以当做表达式或者语句
如果使用when当前表达式满足条件的分支会当做when的返回值。当when当做语句使用的时候会忽略所有分支的值。when的每个分支也可以是语句块最后一个表达式是这个语句块的值。

用做表达式:
var matchValue = 2
var result = when(matchValue){
1 -> 1
2 -> 2
else ->3
}

println(result)用于语句: matchValue = 3
when(matchValue) {
1 -> println(1)
2 -> println(2)
else -> println(3)
}匹配多少值:
kotlin when(matchValue){ 1,2,3 -> println(matchValue) }使用is与!is:
var isInt = when(matchValue){
is Int -> println(matchValue)
else -> false
}使用in与!in:
kotlin var valueIn = when(matchValue){ in 1..3 -> true else -> false }当when没有提供一个值时它的分支是boolean表达式when会执行为真的分支:
var valueIn = when(matchValue){
in 1..3 -> true
else -> false
}for循环
通过任意提供的迭代器的对象循环(迭代器与java类似):
for (item in collection)
print(item)遍历数组: var types = intArrayOf(1, 2, 3)
for(index in types.indices)
print(index.toString() + " ")

for((index, value ) in types.withIndex())
println("index: $index, value: $value")while循环
跟平常的while使用一样:
var index = 0
while(index < 10)
print(index++)

index = 0
do{
print(index)
}while (index++ < 10)转载自:http://www.cnblogs.com/xwgblog/p/5289823.html 查看全部
IF表达式
if在kotlin可以当做表达式使用跟java的三元操作符类似:
var max =  if( a > b )  a else b
if分支可以使用代码块,最后一个表达式是返回值:
var max = if (a > b){
print(a)
a
}else{
print(b)
b
}
When表达式
kotlin使用when来替换switch语句,基本特性都跟switch差不多会对列出来的分支进行匹配满足条件的分支会被执行。when可以当做表达式或者语句
如果使用when当前表达式满足条件的分支会当做when的返回值。当when当做语句使用的时候会忽略所有分支的值。when的每个分支也可以是语句块最后一个表达式是这个语句块的值。

用做表达式:
    var matchValue = 2
var result = when(matchValue){
1 -> 1
2 -> 2
else ->3
}

println(result)
用于语句:
    matchValue = 3
when(matchValue) {
1 -> println(1)
2 -> println(2)
else -> println(3)
}
匹配多少值:
kotlin when(matchValue){ 1,2,3 -> println(matchValue) }
使用is与!is:
    var isInt = when(matchValue){
is Int -> println(matchValue)
else -> false
}
使用in与!in:
kotlin var valueIn = when(matchValue){ in 1..3 -> true else -> false }
当when没有提供一个值时它的分支是boolean表达式when会执行为真的分支:
    var valueIn = when(matchValue){
in 1..3 -> true
else -> false
}
for循环
通过任意提供的迭代器的对象循环(迭代器与java类似):
for (item in collection)
print(item)
遍历数组:
   var types = intArrayOf(1, 2, 3)
for(index in types.indices)
print(index.toString() + " ")

for((index, value ) in types.withIndex())
println("index: $index, value: $value")
while循环
跟平常的while使用一样:
    var index = 0
while(index < 10)
print(index++)

index = 0
do{
print(index)
}while (index++ < 10)
转载自:http://www.cnblogs.com/xwgblog/p/5289823.html

Kotlin学习系列(一)

技术分享admin 发表了文章 • 0 个评论 • 282 次浏览 • 2017-05-23 21:35 • 来自相关话题

基本类型

在Kotlin中任何事物都是对象你可以在任何变量上调用相应的方法或属性。Kotlin的一些内置类型如下:
Number: 包含整形与浮点型Character: 字符(Chat)Boolean: 布尔值String: 字符串Array: 数组

在Kotlin内置的类型个人觉得更加像Java中的一些包装类,如果在学习之前将思维转换成Java包装类的思想我觉得学起来更容易理解一些。当然它们还与Java多少有些不同。

Number类型

Kotlin包含如下number类型:
DoubleFloatLongIntShortByte

怎么样有没有感觉跟Java里面的java.lang.Double、java.lang.Long这些包装类差不多用起来也差不多。还有在Kotlin的数字常量可以用十进制、十六进制、指数形式小数、二进制但是没有八进制。Kotlin中是没有自动向上转型的。//内置数据类型
var d: Double = 64.0
var i: Int = 32
var l: Long = 64
var f: Float = 32.0F
var b: Byte = 8
var s: Short = 16

//数字常量
i = 1 //十进制
i = 0x1 //十六进制
i = 01 //八进制不允许
i = 0b00000 //二进制
d = 1.2E10 //指数形式
f = 1.2E10F

//没有自动向上转换
l = i //Int不能自动转换成Long
d = f //同样Float也不能自动转换不过上面说了Kotlin中任何事物都是对象那么我们可以调用相应的方法来显示转换。var i: Int = 5;
var l: Long = i.toLong();字符类型
字符类型在Kotlin中用Char来表示,它不能直接去应用一个number类型如var ch: Int = 'c'是错误的必需要显示的转换var ch: Int = 'c'.toInt()同样Char也支持转意字符\n、\b、\r等跟Java中的差不多。
 
数组
在Kotlin数组分为基本类型的数组和其他类型数据,基本数组类型是指数组中的元素类型都是基本数据类型如: Int、Long、Floa这些类型的数组在Kotlin中分别用IntArray、LongArray、FloatArray来表示可以通过Kotlin内置的方法来创建<*>ArrayOf(values)里面的*号代表具体的元素类型。 var intArray: IntArray = intArrayOf(1, 3, 4);
var longArray: LongArray = longArrayOf(1L, 2L)其他类型的数组可以使用Array通过传入大小与生成对象的方法来创建数组。var str: Array<String> = Array(5, { index -> index.toString })字符串
字符串用String表示同Java一样是不可变的同样内部也用字符组成,访问内部字符可以通过s和循环来遍历。[i]var hello: String = "HelloWorld"

for(index: Int in 0..hello.length - 1){
println(hello[index])
}

for(ch in hello){
println(ch)
}[/i]字符串可分为能够转意一些特殊字符的字符串和原始的字符串。[i] var text1: String = "Hello\tWorld"
var text2: String = """
Hello\bWorld
"""

println(text1)
println(text2)[/i]在text1中\t会转间成一个制表符但在text2不但\b不会转意且任何内容都会照样输出。原始字符串类似XMl中的CDATA。字符串中可以使用模版,就像Java中的String.format的一样但在Kotlin中使用$号开始后面可以加变量名来替换内容。[i] var name: String = "Kotlin";
var greet: String = "Hi, $name";
println(greet)[/i]学习总结

学习Kotlin时免不了要与Java比较但Kotlin更像类似Swift,看IOS同事写Swift后学习了Kotlin的基本类型后感觉太相似了。说实话还是比较喜欢Java这种强类型的语言也许是用了几年不太适应吧。既然开始了一定要坚持学下去不能落伍。本人水平有限可能免不了手滑一下如有错误烦请指出,会即时更改。
 
转载自:http://www.cnblogs.com/xwgblog/p/5245200.html 查看全部
基本类型

在Kotlin中任何事物都是对象你可以在任何变量上调用相应的方法或属性。Kotlin的一些内置类型如下:
  • Number: 包含整形与浮点型
  • Character: 字符(Chat)
  • Boolean: 布尔值
  • String: 字符串
  • Array: 数组


在Kotlin内置的类型个人觉得更加像Java中的一些包装类,如果在学习之前将思维转换成Java包装类的思想我觉得学起来更容易理解一些。当然它们还与Java多少有些不同。

Number类型

Kotlin包含如下number类型:
  • Double
  • Float
  • Long
  • Int
  • Short
  • Byte


怎么样有没有感觉跟Java里面的java.lang.Double、java.lang.Long这些包装类差不多用起来也差不多。还有在Kotlin的数字常量可以用十进制、十六进制、指数形式小数、二进制但是没有八进制。Kotlin中是没有自动向上转型的。
//内置数据类型
var d: Double = 64.0
var i: Int = 32
var l: Long = 64
var f: Float = 32.0F
var b: Byte = 8
var s: Short = 16

//数字常量
i = 1 //十进制
i = 0x1 //十六进制
i = 01 //八进制不允许
i = 0b00000 //二进制
d = 1.2E10 //指数形式
f = 1.2E10F

//没有自动向上转换
l = i //Int不能自动转换成Long
d = f //同样Float也不能自动转换
不过上面说了Kotlin中任何事物都是对象那么我们可以调用相应的方法来显示转换。
var i: Int = 5;
var l: Long = i.toLong();
字符类型
字符类型在Kotlin中用Char来表示,它不能直接去应用一个number类型如var ch: Int = 'c'是错误的必需要显示的转换var ch: Int = 'c'.toInt()同样Char也支持转意字符\n、\b、\r等跟Java中的差不多。
 
数组
在Kotlin数组分为基本类型的数组和其他类型数据,基本数组类型是指数组中的元素类型都是基本数据类型如: Int、Long、Floa这些类型的数组在Kotlin中分别用IntArray、LongArray、FloatArray来表示可以通过Kotlin内置的方法来创建<*>ArrayOf(values)里面的*号代表具体的元素类型。
    var intArray: IntArray = intArrayOf(1, 3, 4);
var longArray: LongArray = longArrayOf(1L, 2L)
其他类型的数组可以使用Array通过传入大小与生成对象的方法来创建数组。
var str: Array<String> = Array(5, { index -> index.toString })
字符串
字符串用String表示同Java一样是不可变的同样内部也用字符组成,访问内部字符可以通过s和循环来遍历。
[i]var hello: String = "HelloWorld"

for(index: Int in 0..hello.length - 1){
println(hello[index])
}

for(ch in hello){
println(ch)
}[/i]
字符串可分为能够转意一些特殊字符的字符串和原始的字符串。
[i]    var text1: String = "Hello\tWorld"
var text2: String = """
Hello\bWorld
"""

println(text1)
println(text2)[/i]
在text1中\t会转间成一个制表符但在text2不但\b不会转意且任何内容都会照样输出。原始字符串类似XMl中的CDATA。字符串中可以使用模版,就像Java中的String.format的一样但在Kotlin中使用$号开始后面可以加变量名来替换内容。
[i]    var name: String = "Kotlin";
var greet: String = "Hi, $name";
println(greet)[/i]
学习总结

学习Kotlin时免不了要与Java比较但Kotlin更像类似Swift,看IOS同事写Swift后学习了Kotlin的基本类型后感觉太相似了。说实话还是比较喜欢Java这种强类型的语言也许是用了几年不太适应吧。既然开始了一定要坚持学下去不能落伍。本人水平有限可能免不了手滑一下如有错误烦请指出,会即时更改。

 
转载自:http://www.cnblogs.com/xwgblog/p/5245200.html

Kotlin入门简介

回复

技术分享admin 发起了问题 • 1 人关注 • 0 个回复 • 587 次浏览 • 2017-05-23 21:31 • 来自相关话题

欢呼声热烈 谷歌宣布 Kotlin 成 Android 开发一级语言

技术问答admin 发表了文章 • 0 个评论 • 210 次浏览 • 2017-05-19 23:21 • 来自相关话题

谷歌I/O大会一开始就宣布了Android设备超过20亿部的好消息,会议推进至此,果然Android才是大会的压轴大戏么?

首先,今年夏末应该就可以收到Android O的推送,当然,国内用户就先别想了,除非你一直都用原生的。其次,有两个关键词需要注意,一是“Fluid Experience(流畅体验)”,二是“Vitals(核心功能)”。

地图、Netflix、浏览器中的视频等将支持安卓O画中画功能,随后还会有更多应用支持画中画,相当于另一种形态的多任务处理,这是Fluid Experience(流畅体验)的一部分。另外,通知部分也有升级,所谓“Notification Dots(通知点)”有点像是iOS App右上角的提示标,但是长按的话会显示更多信息。

Android O也带来了更加智能化的信息填充系统,未来不仅仅是Chrome中的表格信息,App中的信息也可以自动填充了。另外,新增的"智能文本选择”,可用于更加效率的复制和粘贴。最后,名为“TensorFlow Lite”的机器学习功能专用于手机,将会在之后的一段时间上线,具体功能并未详细提及。

Vitals(核心功能)部分,谷歌更强调电池续航、安全性、启动时间和稳定性。安全性方面,Google Play商店采用机器学习,每天都会扫描500亿次应用程序,告知你手机上的App已经经过扫描,让安全性更具可视化。

启动时间方面,谷歌给出的数据是,在Pixel上,Android O的启动时间是上代的一半。Android O的运行也会更加高效,保持闲置后台回收;太多的后台程序会消耗电池电量, Android O将提供智能节点措施。针对开发者,Play Console Dashboard可以告诉开发者他们的应用耗电、闪退情况;告知开发者有多少用户受到不良应用侵犯,协同开发者一起为用户提供更好的App体验。

然而并没有太多能和用户挂钩的功能性升级,至少大会上提到的这些内容,如果不算那一波更新的emoji,我们目前很难有什么实质性的感受。

最后,谷歌宣布,将Kotlin语言作为安卓开发的一级编程语言。Kotlin由JetBrains公司开发,与Java 100%互通,并具备诸多Java尚不支持的新特性。谷歌称还将与JetBrains公司合作,为Kotlin设立一个非盈利基金会。

JetBrains在2010年首次推出Kotlin编程语言,并在次年将之开源。下一版的Android Studio(3.0)也将提供支持。

稿源:网易科技、cnbeta 查看全部
谷歌I/O大会一开始就宣布了Android设备超过20亿部的好消息,会议推进至此,果然Android才是大会的压轴大戏么?

首先,今年夏末应该就可以收到Android O的推送,当然,国内用户就先别想了,除非你一直都用原生的。其次,有两个关键词需要注意,一是“Fluid Experience(流畅体验)”,二是“Vitals(核心功能)”。

地图、Netflix、浏览器中的视频等将支持安卓O画中画功能,随后还会有更多应用支持画中画,相当于另一种形态的多任务处理,这是Fluid Experience(流畅体验)的一部分。另外,通知部分也有升级,所谓“Notification Dots(通知点)”有点像是iOS App右上角的提示标,但是长按的话会显示更多信息。

Android O也带来了更加智能化的信息填充系统,未来不仅仅是Chrome中的表格信息,App中的信息也可以自动填充了。另外,新增的"智能文本选择”,可用于更加效率的复制和粘贴。最后,名为“TensorFlow Lite”的机器学习功能专用于手机,将会在之后的一段时间上线,具体功能并未详细提及。

Vitals(核心功能)部分,谷歌更强调电池续航、安全性、启动时间和稳定性。安全性方面,Google Play商店采用机器学习,每天都会扫描500亿次应用程序,告知你手机上的App已经经过扫描,让安全性更具可视化。

启动时间方面,谷歌给出的数据是,在Pixel上,Android O的启动时间是上代的一半。Android O的运行也会更加高效,保持闲置后台回收;太多的后台程序会消耗电池电量, Android O将提供智能节点措施。针对开发者,Play Console Dashboard可以告诉开发者他们的应用耗电、闪退情况;告知开发者有多少用户受到不良应用侵犯,协同开发者一起为用户提供更好的App体验。

然而并没有太多能和用户挂钩的功能性升级,至少大会上提到的这些内容,如果不算那一波更新的emoji,我们目前很难有什么实质性的感受。

最后,谷歌宣布,将Kotlin语言作为安卓开发的一级编程语言。Kotlin由JetBrains公司开发,与Java 100%互通,并具备诸多Java尚不支持的新特性。谷歌称还将与JetBrains公司合作,为Kotlin设立一个非盈利基金会。

JetBrains在2010年首次推出Kotlin编程语言,并在次年将之开源。下一版的Android Studio(3.0)也将提供支持。

稿源:网易科技、cnbeta