Java之于Kotlin对比(Android)
前言
- 通过一段时间对Kotlin的使用,总结一下Android版kotlin各种语法的写法
- 顺便发几个常用工具类的写法,希望大家指正
正文
######1、 Thread
- Java写法
new Thread(new Runnable() {@Overridepublic void run() {}
}).start();
复制代码
- Kotlin写法
Thread(Runnable {}).start()
复制代码
######2、Handler
- Java
private Handler handler=new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {switch(msg.what){case 0:break;default:break; }return false;}});
复制代码
- kotlin
private val handler=Handler(Handler.Callback{msg->when(msg.what){0->{}else->{}}false
})
复制代码
3、setOnClickListener
- Java
btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}
});
复制代码
- Kotlin
btn.setOnClickListener{}
复制代码
4、RadioGroup setOnCheckedChangeListener
- Java
RadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch(checkedId){case R.id.nav_bottom_menu_1:break;case R.id.nav_bottom_menu_2:break;case R.id.nav_bottom_menu_3:break;case R.id.nav_bottom_menu_4:break;}} });
复制代码
- Kotlin
radioMenu.setOnCheckedChangeListener { _, checkedId ->when (checkedId) {R.id.nav_bottom_menu_1 -> {}R.id.nav_bottom_menu_2 -> {}R.id.nav_bottom_menu_3 -> {}R.id.nav_bottom_menu_4 -> {}}}
复制代码
5、JavaBean写法
- Java
public class Student{private String name;private int age;public String getName(){return name;}public void setName(String name){this.name=name;}public String getAge(){return age;}public void setAge(String age){this.age=age;}@Overridepublic String toString() {return "Student{" +"name='" + name+ '\'' +", age='" + age+ '\'' +'}';}
}
复制代码
- kotlin
data class Student(var name:String,var age:Int) {override fun toString(): String {return "Student(name='$name', age=$age)"}
}
//注意:
//1、声明为var类型后系统自动实现get\set方法 如果是val类型则无法用xx.name调用
//2、该类默认实现了Student(name,age)构造器,如果想在调用中以空构造器实现,需要给该类赋初值如:
data class Student(var name:String="",var age:Int=0) {//::::::
}
复制代码
####常用工具类(Kotlin版本):
- SharePreference工具类
import android.content.Context
import android.content.SharedPreferences
import android.support.v4.content.SharedPreferencesCompat/*** Function:* author: limh* time:2017/7/24*/
object SharePreferUtils {val FILE_NAME: String = "xxx"//文件名称fun put(context: Context, key: String, any: Any) {val sp: SharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE)val editer: SharedPreferences.Editor = sp.edit()if (any is String)editer.putString(key, any)else if (any is Int)editer.putInt(key, any)else if (any is Float)editer.putFloat(key, any)else if (any is Long)editer.putLong(key, any)else if (any is Boolean)editer.putBoolean(key, any)SharedPreferencesCompat.EditorCompat.getInstance().apply(editer)}fun get(context: Context, key: String, default: Any): Any {val sp: SharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE)if (default is String)return sp.getString(key, default)else if (default is Int)return sp.getInt(key, default)else if (default is Float)return sp.getFloat(key, default)else if (default is Long)return sp.getLong(key, default)else if (default is Boolean)return sp.getBoolean(key, default)return ""}fun putSet(context: Context, key: String, value: Set<String>) {val sp: SharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE)val editer: SharedPreferences.Editor = sp.edit()editer.putStringSet(key, value)SharedPreferencesCompat.EditorCompat.getInstance().apply(editer)}fun getSet(context: Context, key: String): Set<String> {val sp: SharedPreferences = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE)return sp.getStringSet(key, null)}
}
复制代码
- Gson转换工具类
import com.google.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonParser
import org.json.JSONException
/*** Function:* author: limh* time:2017/7/11*/
object GsonUtils {var gson: Gson = Gson()/*** Bean转String*/fun <T> Gson2Str(gs: T): String {return gson.toJson(gs)}/*** string转Bean*/fun <T> str2Bean(gsonString: String, cls: Class<T>): T {return gson.fromJson(gsonString, cls)}/*** list<T>转String*/fun <T> list2Str(list: List<T>): String {val arry = JsonArray()for (item in list)arry.add(Gson2Str(item))return arry.toString()}/*** str转List<T>*/fun <T> str2List(str: String, cls: Class<T>): MutableList<T> {val datas = ArrayList<T>()try {val array = JsonParser().parse(str).asJsonArraySystem.out.println("数组长度=" + array.size())for (i in 0..array.size() - 1) {datas.add(str2Bean(array.get(i).asString, cls))}} catch (e: JSONException) {System.out.println("异常=" + e.message)e.printStackTrace()}return datas}/*** str转List<T>*/fun <T> str2List(str: List<String>, cls: Class<T>): ArrayList<T> {val datas = ArrayList<T>()try {for (item in str) {datas.add(str2Bean(item, cls))}} catch (e: JSONException) {System.out.println("异常=" + e.message)e.printStackTrace()}return datas}
}
复制代码
- BaseActivity
abstract class BaseActivity : AppCompatActivity() {private var appConfig: AppConfig?=nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)findView()appConfig = AppConfig.getInstance()initViews()initDatas()}abstract fun findView()abstract fun initViews()abstract fun initDatas()/*** 启动一个Activity*/fun openActivity(tagClass: Class<*>) {val intent = Intent()intent.setClass(this, tagClass)startActivity(intent)}/*** 启动Service*/fun openService(tagClass: Class<*>) {val intent = Intent()intent.setClass(this, tagClass)startService(intent)}/*** 稍长时间展示toast*/fun showToastLong(msg: String) {Toast.makeText(this, msg, Toast.LENGTH_LONG).show()}/*** 短时间展示toast*/fun showToastShort(msg: String) {Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()}/*** 发送消息* 需要在继承的activity中定义一个handler* 例如:* private val handler = Handler(Handler.Callback { msg ->** false* })*/fun sendMsg(msg: String, what: Int, handler: Handler) {val bundle = Bundle()bundle.putString("msg", msg)val message = Message()message.what = whatmessage.data = bundlehandler.sendMessage(message)}/*** 隐藏软件盘*/fun Activity.hideKeyboard(): Boolean {val view = currentFocusview?.let {val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE)as InputMethodManagerreturn inputMethodManager.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)}return false}override fun onDestroy() {super.onDestroy()}
}
复制代码
转载于:https://juejin.im/post/5a31dc5151882504a35efc9c
Java之于Kotlin对比(Android)相关推荐
- Java vs Kotlin,Android开发人员应该选择哪种语言?
自 Google 于 2017 年宣布 Kotlin 成为 Google IO 的 Android 开发官方语言以来,想要成为Android开发人员的程序员正陷入两难境地. 在讨论这个问题前,我首先要 ...
- android安卓java文件转kotlin格式
下面我们要分四步完成Kotlin的配置. 新建一个Android项目. 修改Gradle代码来添加Kotlin Gradle插件与标准库. 在IntelliJ或Android Studio中添加Kot ...
- Kotlin for Android
在Google IO 2017 大会上,Google将 Kotlin列为 Android官方开发语言,Android Studio 3.0 也默认集成了Kotlin插件. Android Studio ...
- 第14章 使用Kotlin 进行 Android 开发
2019独角兽企业重金招聘Python工程师标准>>> 第14章 使用Kotlin 进行 Android 开发 根据Realm Report (2017-Q4,https://rea ...
- kotlin开发Android入门篇一
基础篇:基本类型及方法的定义 kotlin介绍:Kotlin是一个基于JVM 的新的编程语言,由JetBrains 开发. Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便 ...
- kotlin开发Android入门篇八Kotlin开发Android的基本使用
基础篇:Kotlin开发Android的基本使用 使用AndroidStudio3.0及以上开发Kotlin在新建项目中勾选这个选项则会默认开发语言为Koltin,然后再gradle(Project的 ...
- 用 Kotlin 开发 Android 项目是一种什么样的感受?(二)
前言 前面我已经写了一篇名为<用 Kotlin 开发 Android 项目是一种什么样的感受?>的文章.文中多数提到的还是 Kotlin 语言本身的特点,而 Kotlin 对于 Andro ...
- 《Kotlin for android developers》中文版翻译
<Kotlin for android developers>中文版翻译 错别字.病句.翻译错误等问题可以提issues.请说明错误原因. 在线阅读或下载GitBook 在线阅读 希望大家 ...
- java转安卓快吗_安卓Kotlin开发系列之Java快速转Kotlin
原标题:安卓Kotlin开发系列之Java快速转Kotlin 自从Kotlin被宣布为Android开发语言的官方支持后,如今可谓是火的一塌糊涂,作为一名Android程序员,如何快速爬坑?今天为大家 ...
最新文章
- 想做程序员却不知从何下手?新手入门信息打包送你!
- 8_用opencv调用深度学习框架tenorflow、Pytorch、Torch、caffe训练好的模型(20190212)
- 中国乙二醇型汽车防冻液市场运营能力分析与投资战略规划研究报告2022-2028年版
- 【虚拟化】docker安装ElasticSearch+Kibana,下载IK分词器
- (笔记)网络技术学习交流会
- UNIX网络编程——进程间通信概述
- 字典中文乱码怎么处理_CATIA教程技巧和二次开发宏:我的零件有很多的几何体,但是几何体的名称是乱的,还有乱码,影响我的后续操作,我该怎么处理?...
- F - Prime Path
- redis主从复制_Redis 的主从复制(Master/Slave)
- 鸿蒙渊 灵兽经验,【转】[攻略]传奇世界灵兽升级经验汇总
- 基于Python的RNN文本生成写诗系统
- 数学模型:传染病模型
- PCB叠层排布原则以及AD中如何设计叠层
- 学英语尽量不要从背词汇表开始
- LTE终端能力等级 Category
- 天津大学计算机学院课表,天津大学软件实践1汇编语言课程教学大纲-天津大学计算机学院.PDF...
- 自动驾驶是一门怎样的生意?盘点5家创业公司商业落地的3条逻辑...
- php h m s 转为秒,将m³/s换算为m³/h (立方米每秒换算为立方米每小时)
- 如何实现WiFi与5G无缝切换?如何进行无线通信切换测试?(二)
- 数据治理:元数据及元数据管理策略、方法和技术
热门文章
- LinkedHashMap源码分析
- 常用服务器返回码意义
- python transformers_transformers 安装
- 【LeetCode】最大子序和
- BZOJ1575: [Usaco2009 Jan]气象牛Baric
- Sizzle引擎--原理与实践(二)
- FFMPEG more samples than frame size (avcodec_encode_audio2) 的解决方案
- eclipse中运行tomcat提示端口被占的4种解决方案
- rocketMq指定broker ip地址,适合解决云主机部署问题
- oracle数据库解决system表空间已爆满的问题