Java转Kotlin
Java 转 Kotlin
打印日志
- Java
System.out.println("sss");
- kotlin
println("sss")
常量与变量
- Java
String name = "sss";
final String name = "sss";
- Kotlin
var name = "sss"
val name = "sss"
null说明
- Java
String otherName;
otherName = null;
- Kotlin
var otherName :String?
otherName = null
空判断
- Java
if(text != null){
int length = text.length();
}
- Kotlin
text?.let{
val length = text.length
}
//or simply
val length = text?.length
字符串拼接
- Java
String firstName = "aaa";
String lastName = "bbb";
String message = "My Name is: " + firstName + lastName;
- Kotlin
val firstName = "aaa"
val lastName = "bbb"
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
final int andResult = a & b;
final int orResult = a | b;
final int xorResult = a ^ b;
final int rightShift = a >> 2;
final int leftShift = a << 2;
final int unsignedRightShift = a >>> 2;
- Kotlin
val andResult = a and b
val orResult = a or b
val xorResult = a xor b
val rightShift = a shr b
val leftShift = a shl b
val unsignedRightShift = a ushr 2
类型判断和转换(声明式)
- 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
}
多重条件
- 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"
}
for 循环
- Java
for(int i = 1; i <= 10; i++){}
for(int i = 1; i < 10; i++){}
for(int i = 10; i >= 0; i--){}
for(int i = 10; i <= 10; i += 2){}
for(int i = 10; 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 until 10){}
for(i in 10 downTo 0){}
for(i in 1..10 step 2){}
for(i in 10 downTo 0 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, "aaa");
map.put(2, "bbb");
map.put(3, "ccc");
// Java 9
final List<Integer> listOfNumber = List.of(1,2,3,4);
final Map<Integer, String> keyValue = Map.of(1, "aaa"
2, "bbb"
3, "ccc");
- Kotlin
val listOfNumber = listOf(1,2,3,4)
val keyValue = mapOf(1 to "aaa"
2 to "bbb"
3 to "ccc")
遍历
- Java
// Java 7 and below
for(Car car : cars){
System.out.println(car.speed);
}
for(Car car : cars){
if(car.speed > 100){
System.out.println(car.speed);
}
}
// Java 8+
cars.forEach(car -> System.out.println(car.speed));
cars.stream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));
- Kotlin
cars.forEach{
println(it.speed)
}
cars.filterP{it.speed > 100}
.forEach{println(it.speed)}
方法定义
- Java
void doSomething(){
//logic here
}
void doSomething(int...numbers){
//logic here
}
- Kotlin
fun doSomething(){
//logic here
}
fun doSomething(vararg numbers: Int){
//logic here
}
带返回值的方法
- Java
int getScore(){
//logic here
return score;
}
- Kotlin
fun getScore(): Int{
// logic here
return score
}
// as a single-expression function
fun getScore(): Int = score;
无结束符号
- Java
int getScore(int value){
//logic here
return 2 * value;
}
- Kotlin
fun getScore(value: Int): Int{
// logic here
return 2 * value;
}
fun getScore(value: Int): Int = 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
}
}
}
// another way
object Utils{
fun getScore(value: Int): Int{
return 2 * value
}
}
Get Set构造器
- Java
public 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
}
val result = 3.triple()
- Java
public enum Direction{
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);
int direction;
Direction(int direction){
this.direction = direction;
}
public int getDirection(){
return direction;
}
}
- Kotlin
enum class Direction(val direction: Int){
NORTH(1),
SOUTH(2),
WEST(3),
EAST(4);
}
原文链接:https://github.com/MindorksOpenSource/from-java-to-kotlin/blob/master/README-ZH.md