微信是java 写的还是kotlin_全民Kotlin:Java我们不一样

随着 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 MainActivity : 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 test(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 = {"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(array[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 的写法

int count = 1;

switch (count) {

case 0:

System.out.println(count);

break;

case 1:

case 2:

System.out.println(count);

break;

default:

System.out.println(count);

break;

}

Kotlin 的写法

var count = 1

when (count) {

0 -> {

println(count)

}

in 1..2 -> {

println(count)

}

else -> {

println(count)

}

}

var count = 1

// 换种更简洁的写法

when (count) {

0 -> println(count)

in 1..2 -> println(count)

else -> println(count)

}

构造函数

Java 的写法

public class MyView extends View {

public MyView(Context context) {

this(context, null);

}

public MyView(Context context, @Nullable AttributeSet attrs) {

this(context, attrs, 0);

}

public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

}

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 的写法

public class Person {

String name;

int age;

public Person(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;

}

}

Person person = new Person("Android轮子哥", 100);

person.setName("HJQ");

person.setAge(50);

System.out.println("name: " + person.getName() + ", age: " + person.getAge());

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 的写法

public class Person {

String name;

int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

private void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

private void setAge(int age) {

this.age = age;

}

}

Kotlin 的写法

class Person {

var name : String? = null

private set

var age : Int = 0

private set

}

私有化 get 方法

Java 的写法

public class Person {

String name;

int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

private String getName() {

return name;

}

private void setName(String name) {

this.name = name;

}

private int getAge() {

return age;

}

private void setAge(int age) {

this.age = age;

}

}

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: Boolean) {

MAN(true), WOMAN(false)

}

接口

Java 的写法

public interface Callback {

void onSuccess();

void onFail();

}

Kotlin 的写法(Kotlin接口方法里面是可以自己实现,这里就不再演示了)

interface Callback {

fun onSuccess()

fun onFail()

}

匿名内部类

Java 的写法

new Callback() {

@Override

public void onSuccess() {

}

@Override

public void onFail() {

}

};

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 void 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 : AppCompatActivity(), Runnable {

abstract fun init()

}

静态变量和方法

Java 的写法

public class ToastUtils {

public static Toast sToast;

public static void show() {

sToast.show();

}

}

Kotlin 的写法(在 Kotlin 将这种方式称之为伴生对象)

companion object ToastUtils {

var sToast : Toast? = null

fun show() {

sToast!!.show()

}

}

可变参数

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 MainActivity 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)

修饰符

作用

public

所有类可见

protected

子类可见

default

同一包下的类可见

private

仅对自己类可见

Kotlin 的写法(默认为 public)

修饰符

作用

public

所有类可见

internal

同 Module 下的类可见

protected

子类可见

private

仅对自己类可见

Android技术讨论Q群:78797078

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值