序章·Kotlin

一、什么是Kotlin

    Kotlin是一个机遇JVM的新的编程语言,由JetBrains开发。

    Kotlin可以变异成Java字节码,也可以变异成JavaScript,方便在没有JVM的设备上运行。

    JetBrains,作为目前广受欢迎的JavaIDE IntelliJ的提供商,在Apache许可下已经开源其Kotlin编程语言。

    在2017Google大会上,Kotlin正式成为Android官方开发语言。

二、Kotlin的历史

由 JetBrain 的牛人 Dmitry Jemerov 在2011年开始带队开发,

虽说Kotlin比Java语言新,但其实这门语言早在2015年就有人开始推荐使用了,目前发现的最早推广Kotlin的是 AntonioLeiva  ,你可以看他发表的第一篇Kotlin的文章是在2015年三月。那时候我对Kotlin的第一印象还不错,语言风格偏现代,且和Java是兼容的。从那以后Kotlin越来越流行,连JakeWharton大神都在2015年12月专门做了Kotlin的演讲 ,被Android社区第一大神推荐,可以说那个时候Kotlin基本被国外的高端开发者认可了。  

所以2015年是Kotlin起势的一年,2016年是厚积薄发的一年,不管有没有谷歌的推荐Kotlin都将成为一门流行的语言。谷歌只不过顺势而为,推了一把,然后事情就这样一发不可收拾了。

一个超级全的kotlin的介绍分析http://blog.csdn.net/weixin_37730482/article/details/73558216

三、开始用Kotlin做一个Demo中途遇到的问题

Android Studio3.0中已经默认安装了Kotlin插件,支持Kotlin语言。

对于非studio3.0的配置在这里http://blog.csdn.net/true100/article/details/52034460

①将一个java类转为kotlin

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

快捷键ctrl+shift+alt+k

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}
很显然,:相当于extends和implements

原来的void onCreate方法也变成了fun onCreate,这个方法有点像c语言里边的函数了

onCreate方法里面的形参形式也出现了变化,这里要注意的是?就是返回值为void的意思

 ②java 变量和kotlin变量的区别

mImgView = (ImageView) findViewById(imageView);
//将一个补间动画的Xml文件转换成一个动画类型
Animation animation = AnimationUtils.loadAnimation(this,R.anim.splash_anim);
mImgView.startAnimation(animation);
var loadAnimation = AnimationUtils.loadAnimation(this, R.anim.splash_anim)
splash_img.startAnimation(loadAnimation)

可以看出,布局文件中的splash_img在kotlin中不用初始化用:findViewById实例化控件(重点)

第二点就是 var 这个关键字了,简化了java中各种变量的严格要求

对于第一点,虽然直接用xml中的控件很方便,但是控件的名字有时候很长,并不符合我们在类中的可读性

还是可以这样来改造的

private var Img :ImageView?=null
mImg = findViewById(R.id.splash_img)
var loadAnimation = AnimationUtils.loadAnimation(this, R.anim.splash_anim)
mImg!!.startAnimation(loadAnimation)
 

mTmg!!代表忽略此处mImg为空的情况,因为kotlin是推荐考虑数据为空的情况,为了避免ExceptionNull,尽量不要!!,更多情况在这里:https://zhuanlan.zhihu.com/p/27285806

神奇的lateinit修饰符( 不支持基本数据类型)

Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理

private lateinit var mImg: ImageView

③new 一个对象,new 一个匿名内部类对象

new Handler().postDelayed(new Runnable() {
    Intent intent = new Intent();

    @Override
    public void run() {
        if (isFirstIn) {
            intent.setClass(SplashActivity.this, GuideActivity.class);
            Editor editor = sharedPreferences.edit();
            editor.putBoolean("isFirstIn", false);
            editor.commit();
        } else {
            intent.setClass(SplashActivity.this, MainActivity.class);
        }

        startActivity(intent);
        SplashActivity.this.finish();
    }
}, 3000);  
Handler().postDelayed(object : Runnable {
    override fun run() {

        if (isFirstIn!!) {
            intent!!.setClass(this@SplashActivity, GuideActivity::class.java!!)
            val editor = sharedPreferences.edit()
            editor.putBoolean("isFirstIn", false)
            editor.commit()
        }else{
            intent!!.setClass(this@SplashActivity, MainActivity::class.java)
        }
        startActivity(intent)
    }

}, 3000)

new 一个类并不需要new 这个关键字了

而实现了runnable接口的内名内部类则要制定一个object的对象

采用对象表达式来创建接口对象,即匿名内部类的实例。

两个kotlin思路和java不一样,java new就可以了,kotlin对于接口要对象表达式

关于::符号就是得到类对象,更多符号在这里http://blog.csdn.net/zxc123e/article/details/73368781


四、Kotlin与java的混合开发

在Kotlin项目中复制粘贴java代码,系统会提示转成Kotlin,比较容易转,但是复杂的java代码有时会报错。要是嫌弃一个个改,可以直接引用java类中的方法。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值