作者:Android轮子哥
链接:https://www.jianshu.com/p/a01e6b957269


随着 Kotlin 越来越火爆,学习 Kotlin 已经成为我们必经之路。

多余的话就不说了,代码是最好的老师。

对象


Java 的写法

MainActivity.this

Kotlin 的写法

this@MainActivity


Java 的写法

MainActivity.class

Kotlin 的写法

MainActivity::class.java

继承


Java 的写法

public class MainActivity extends AppCompatActivity {
}
Kotlin 的写法(在 Kotlin 中被继承类必须被 open 关键字修饰)

class M海上保卫战中文版ainActivity : AppCompatActivity() {

}

变量


Java 的写法

Intent intent罗定中学校园网 = new Intent();

Kotlin 的写法

var intent = Intent()

常量


Java 的写法

final String text = "";

Kotlin 的写法

val text = ""

静态常量


Java 的写法

public class MainActivity extends AppCompatActivity {
static final String text = "";
}
Kotlin 的写法(需要注意的是要把静态变量定义在类上方)

const val text = ""

class MainActivity : 王加炎念什么AppCompatActivity() {

}

定义方法


Java 的写法

public void test(String message) {
}
Kotlin 的写法(Unit 跟 void 一样效果)

fun test(message : String) : Unit {市场湄公鱼多少钱一斤
}
// 在 Kotlin 可以省略 Unit 这种返回值
fun t徐智雅est(message : String) {
}

重载方法


Java 的写法

public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}

Kotlin 的写法


class MainActivity : AppCompatActivity() {
override吴承恩,群英会开奖结果,七年之痒 fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}

基本数据类型


Java 的写法

int i = 1;
long l = 2;
boolean b = true;
float f = 0;
double d = 0;
char c = 'A';
String s = "text";
Kotlin 的写法

var i : Int = 1

var l : Long = 2

var b : Boolean = true

var f : Float = 0F

var d : Double = 0.0

var c : Char = 'A'

var s : String = "text"

// 更简洁点可以这样,自动推倒类型

var i = 1

var l = 2

var b = true

var f = 0F

var d = 0.0

var c = 'A'

var s = "text"

比较类型


Java 的写法

if ("" instanceof String) {
}
Kotlin 的写法

if ("" is String) {

}

转换符


Java 的写法

int number = 100;

System.out.println(String.format("商品数量有%d", number));

Kotlin 的写法

var number = 100

println("商品数量有${number}")

// 换种简洁的写法

var number = 100

println("商品数量有$number")

// 如果不想字符串被转义可以使用\$

var number = 100

println("商品数量有\$number")

比较字符串


Java 的写法

String s1 = "text";
String s2 = "text";
if (s1.equals(s2)) {
}
Kotlin 的写法(Kotlin 对字符串比较的写法进行优化了,其他类型对象对比还是要用 equals 方法)

var s1 = "text"
var s2 = "text"
if (s1 == s2) {
}

数组


Java 的写法

int[] array1 = {1, 2, 3};
float[] array2 = {1f, 2f, 3f};
String[] array3 = {"1", "2", "3"};
Kotlin 的写法

val array1 = intArrayOf(1, 2, 3)

val array2 = floatArrayOf天羽影院(1f, 2f, 3f)

val array3 = arrayListOf("1", "2", "3")

循环


Java 的写法

String[] array = 泰介强x了桂言叶几次{"1", "2", "3"};
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}

Kotlin 的写法


val array = arrayListOf("1", "2", "3")
for (i in array.indices) {
println(array[i])
}

角标循环


Java 的写法

String[] array = {"1", "2", "3"};
for (int i = 1; i < array.length; i++) {
System.out.println(array[i]);
}

Kotlin 的写法(这种写法在 Kotlin 中称之为区间)

val array = arrayListOf("1", "2", "3")
for (i in IntRange(1, array.size - 1)) {
println(array[i])
}
// 换种更简洁的写法
val array = arrayListOf("1", "2", "3")
for (i in 1..array.size - 1) {
println(afxzdmrray[i])
}
// 编译器提示要我们换种写法
val array = arrayListOf("1", "2", "3")
for (i in 1 until array.size) {
println(array[i])
}

高级循环


Java 的写法

String小笃儿[] array = {"1", "2", "3"};
for (String text : array) {
System.out.println(text);
}
Kotlin 的写法
val array = arrayListOf("1", "2", "3")
for (text in array) {
println(text)
}

判断器


Java 的写法

// 换种更简洁的写法
var count = 1
// 换种更简洁的写法
when (count) {
0 -> println(count)
in 1..2 -> println(count)
else -> pr求租执业药师证急急急intln(count)
}

构造函数


Java 的写法

Kotlin 的写法

class MyView : View {
constructor(context : Context) : this(context, null) {
}
吃墨水的是谁constructor(context : Context, attrs : AttributeSet?) : this(context, attrs, 0) {
}
constructor(context : Context, attrs : AttributeSet?, defStyleAttr : Int) : super(context, attrs, defStyleAttr) {
}
}
// 换种更简洁的写法
class MyView : View {
constructor(context : Context) : this(context, null)
constructor(context : Context, attrs : AttributeSet?) : this(context, attrs, 0)
constructor(context : Context, attrs : AttributeSet?, defStyleAttr : Int) : super(context, attrs, defStyleAttr)
}


// 只有一种构造函数的还可以这样写
class MyView(context: Context?) : View(context) {
}

类创建


Java 的写法

Kotlin 的写法(如果不想暴露成员变量的set方法,可德基小神仙以将 var 改成 val )

class Person {
var name : String? = null
get() = field
set(value) {field = value}
var age : Int = 0
get() = field
set(value) {field = value}
}
// 换种更简洁的写法
// 换种更简洁的写法
class Person(var name : String, var age : Int)
var person = Person("Android轮子哥", 100)
person.name = "HJQ"
person.age = 50
println("name: {$person.name}, age: {$person.age}")

私有化 set 方法


Java 的写法

Kotlin 的写法

class Person {
var name : String? = null
private set
var age : Int = 0
private set
}

私有化 get 方法


Java 的写法

Kotlin 的写法
class Person {
private var name : String? = null
private var age : Int = 0
}

枚举


Java 的写法

enum Sex {
MAN(true), WOMAN(false);
Sex(boolean isMan) {}
}
Kotlin 的写法

enum class Sex (var isMan: Bo天魔策歌词olean) {
MAN(true), WOMAN(false)
}

接口


Java 的写法

public interface Callback {
void onSuccess();
void onFail();
}
Kotlin 的写法(Kotlin接口方法里面是可以自己实现矿井藏宝图,这里就不再演示了)

interface Callback {
fun onSuccess()
fun onFail()
}

匿名内部类


Java 的写法

Kotlin 的写法

object:Callback {

override fun onSuccess() {

}

override fun onFail() {

}

}

内部类


Java 的写法

public class MainActivity extends AppCompatActivity {
public class MyTask {
}
}
Kotlin 的写法

class MainActivity : AppCompatActivity() {
inner class MyTask {
}
}

内部类访问外部类同名变量


Java 的写法

String name = "Android轮子哥";
public class MyTask {
String name = "HJQ";
public voi吴慰文d show() {
System.out.println(name + "---" + MainActivity.this.name);
}
}
Kotlin 的写法

var name = "Android轮子哥"
inner class MyTask {
var name = "HJQ"
fun show() {
println(name + "---" + this@MainActivity.name)
}
}

抽象类


Java 的写法

public abstract class BaseActivity extends AppCompatActivity implements Runnable {
abstract void init();
}
Kotlin 的写法

abstract class BaseActivity : AppCompa阿修罗之怒巨佛tActivity(), Runnable {
abst梧桐轩ract fun init()
}

静态变量和方法


Java 的写法

public class ToastUtils {
p元彼ublic static Toast sToast;
public static void show() {
sToast.show();
}
}
Kotlin 的写法(在 Kotlin 将这种方式称之为伴生对象)

companion object ToastUtils {
var sToast : Toast? = null
fun show() {
sToast!!.show()
}
}

默认参数


Java 的写法

public void toast(String text) {
toast(this, text, Toast.LENGTH_SHORT);
}
public void toast(Context context, String text) {
toast(context, text, Toast.LENGTH_SHORT);
}
public void toast(Context context, String text, int time) {
Toast.makeText(context, text, time).show();
}
toast("弹个吐司");
toast(this, "弹个吐司");
toast(this, "弹个吐司", Toast.LENGTH_LONG);
Kotlin 的写法

fun toast(context : Context = this, text: String, time: Int = Toast.LENGTH_SHORT) {
Toast.makeText(context, text, time).show()
}
toast(text = "弹个吐司")
toast(this, "弹个吐司")
toast(this, "弹个吐司", Toast.LENGTH_LONG)

可变参数


Java 的写法

public int add(int... array) {
int count = 0;
for (int i : array) {
count +=分付君诈骗 i;
}
return count;
}

Kotlin 的写法


fun add(vararg array: Int) : Int {
var count = 0
//for (i in array) {
// count += i
//}
array.forEach {
count += it
}
return count
}

泛型


Java 的写法

public class Bean {
T data;
public Bean(T t) {
this.data = t;
}
}
Bean bean = new Bean<>("666666");
Kotlin 的写法

class Bean>(t: T) {
var data = t
}
var bean = Bean("666666")
// 换种更简洁的写法
var bean = Bean("666666")

构造代码块


Java 的写法

public class MainActivity extends AppCompatActivity {
int number;
{
number = 1;
}
}
Kotlin 的写法

class MainActivity : AppCompatActivity() {
var number = 0
init {
number = 1
}
}

静态代码块


Java 的写法

public class MainActivity1 extends AppCompatActivity {
static int number;
static {
number = 1;
}
}
Kotlin 的写法

class MainActivity : AppCompatActivity() {

companion object {

var number = 0

init {

number = 1

}

}

}

方法代码块


Java 的写法

void test(){
{
int a = 1;
}
}
Kotlin 的写法

fun test() {
run {
var a =1
}
}

可见修饰符


Java 的写法(默认为 default)

Kotlin 的写法(默认为 public)