前言:
原文来自https://github.com/MindorksOpenSource/from-java-to-kotlin
本文也只是简单比较kotlin与java的不同之处,实际学习kotlin还是去官网学习比较好。我个人学习的一个网站贴出来:Kotlin中文网
打印日志
-
Java
System.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");
-
Kotlin
print("Amit Shekhar")
println("Amit Shekhar")
常量与变量
-
Java
String name = "Amit Shekhar";
final String name = "Amit Shekhar";
-
Kotlin
var name = "Amit Shekhar"
val name = "Amit Shekhar"
null声明
-
Java
final String name = null;
String otherName;
otherName = null;
- Kotlin
val name : String? = null
var otherName : String?
otherName = null
空判断
-
Java
if(text != null){
int length = text.length();
}
- Kotlin
val length = text?.length
字符串拼接
-
Java
String firstName = "Amit";
String lastName = "Shekhar";
String message = "My name is: " + firstName + " " + lastName;
- Kotlin
val firstName = "Amit"
val lastName = "Shekhar"
val message = "My name is: $firstName $lastName"
换行
-
Java
String text = "First Line\n" +
"Second Line\n" +
"Third Line";
- Kotlin
val text = """
|First Line
|Second Line
|Third Line
""".trimMargin()
三元表达式
-
Java
String text = x > 5 ? "x > 5" : "x <= 5";
- Kotlin
val text = if (x > 5)
"x > 5"
else "x <= 5"
类型判断和转换 (声明式)
-
Java
if(object instanceof Car){
}
Car car = (Car) object;
- Kotlin
if (object is Car) {
}
var car = object as Car
类型判断和转换 (隐式)
-
Java
if(object instanceof Car){
Car car = (Car) object;
}
- Kotlin
if (object is Car) {
var car = object // smart casting
}
多重条件
-
Java
if(score >= 0 && score <= 300 ){}
- Kotlin
if (score in 0..300) { }
更灵活的case语句
-
Java
int score = // some score;
String grade;
switch (score) {
case 10:
case 9:
grade = "Excellent";
break;
case 8:
case 7:
case 6:
grade = "Good";
break;
case 5:
case 4:
grade = "Ok";
break;
case 3:
case 2:
case 1:
grade = "Fail";
break;
default:
grade = "Fail";
}
- Kotlin
var score = // some score
var grade = when (score) {
9, 10 -> "Excellent"
in 6..8 -> "Good"
4, 5 -> "Ok"
in 1..3 -> "Fail"
else -> "Fail"
}
for循环
- Java
for (int i = 1; i <= 10 ; i++) { }
for (int i = 1; i <= 10 ; i+=2) { }
for (String item : collection) { }
for (Map.Entry<String, String> entry: map.entrySet()) { }
- Kotlin
for (i in 1..10) { }
for (i in 1..10 step 2) {}
for (item in collection) {}
for ((key, value) in map) {}
更方便的集合操作
-
Java
final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);
final Map<Integer, String> keyValue = new HashMap<Integer, String>();
map.put(1, "Amit");
map.put(2, "Ali");
map.put(3, "Mindorks");
- Kotlin
val listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to "Amit",
2 to "Ali",
3 to "Mindorks")
遍历
- Java
for (Car car : cars) {
System.out.println(car.speed);
}
for (Car car : cars) {
if(cars.speed > 100) {
System.out.println(car.speed);
}
}
- Kotlin
cars.forEach {
println(it.speed)
}
cars.filter { it.speed > 100 }
.forEach { println(it.speed)}
方法定义
-
Java
void doSomething() {
// logic here
}
- Kotlin
fun doSomething() {
// logic here
}
带返回值的方法
-
Java
int getScore() {
// logic here
return score;
}
- Kotlin
fun getScore(): Int {
// logic here
return score
}
无结束符号;
-
Java
int getScore(int value) {
// logic here
return 2 * value;
}
- Kotlin
fun getScore(value: Int): Int {
// logic here
return 2 * value
}
constructor 构造器
- Java
public class Utils {
private Utils() {
// This utility class is not publicly instantiable
}
public static int getScore(int value) {
return 2 * value;
}
}
- Kotlin
class Utils private constructor() {
companion object {
fun getScore(value: Int): Int {
return 2 * value
}
}
}
// other way is also there
object Utils {
fun getScore(value: Int): Int {
return 2 * value
}
}
Get Set 构造器
- Java
public class Developer {
private String name;
private int age;
public Developer(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Developer developer = (Developer) o;
if (age != developer.age) return false;
return name != null ? name.equals(developer.name) : developer.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return "Developer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- Kotlin
data class Developer(val name: String, val age: Int)
扩展函数
-
Java
public class Utils {
private Utils() {
// This utility class is not publicly instantiable
}
public static int triple(int value) {
return 3 * value;
}
}
int result = Utils.triple(3);
- Kotlin
fun Int.triple(): Int {
return this * 3
}
var result = 3.triple()
License
Copyright (C) 2017 MINDORKS NEXTGEN PRIVATE LIMITED
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.