Kotlin-简约之美-进阶篇(十八)(与Java的较量)
文章目录
- 数据实体类
- 接口变量
- 懒汉式单例
- 构造方法
- 情况1
- 情况2
- lambda的应用
- 无参数
- 有参数加法
- 作为函数参数
- 匿名函数
- 闭包
- 学习交流
在Java当中一些常量通常情况下都是定义在接口当中,默认情况下所有的成员变量都是public static final类型的,所有的方法都是public abstract类型的,而在Kotlin中的接口是不允许定义常量的,但是我们可以通过伴生对象companion object来解决这个问题。
数据实体类
- Java中的实现
public class NewsType {
public int id;
public String typename;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTypename() {
return typename;
}
public void setTypename(String typename) {
this.typename = typename;
}
- Kotlin中的实现
class NewsType {
var id: Int = 0
var typename: String? = null
var addtime: String? = null
}
接口变量
- Java中的定义:
public interface NewsDBConfig {
String DB_NAME = "fly_news.db";
int VERSION_CODE = 1;
interface NewsType {
String TABLE_NAME = "news_type";
String CLUMN_ID = "id";
String CLUMN_TYPE_NAME = "typename";
String CLUMN_ADD_TIME = "addtime";
String CREATE_TABLE = "create table " + TABLE_NAME + " ("+CLUMN_ID+" integer PRIMARY KEY autoincrement," + CLUMN_TYPE_NAME + " varchar(64),"+CLUMN_ADD_TIME+" datetime default (datetime('now','localtime')))";
}
}
- Kotlin中的定义
interface NewsDBConfig {interface NewsType {
companion object {
val TABLE_NAME = "news_type"
val CLUMN_ID = "id"
val CLUMN_TYPE_NAME = "typename"
val CLUMN_ADD_TIME = "addtime"
val CREATE_TABLE = "create table $TABLE_NAME ($CLUMN_ID integer PRIMARY KEY autoincrement,$CLUMN_TYPE_NAME varchar(64),$CLUMN_ADD_TIME datetime default (datetime('now','localtime')))"
}
}
companion object {
val DB_NAME = "fly_news.db"
val VERSION_CODE = 1
}
}
懒汉式单例
- Java中的实现
public class NewsDBHelper extends SQLiteOpenHelper {
private static NewsDBHelper mNewsDBHelper;
public static NewsDBHelper getInstance(Context context) {
if (mNewsDBHelper == null) {
synchronized (NewsDBHelper.class) {
mNewsDBHelper = new NewsDBHelper(context);
}
}
return mNewsDBHelper;
}private NewsDBHelper(Context context) {
super(context, NewsDBConfig.DB_NAME, null, NewsDBConfig.VERSION_CODE);
}
}
- Kotlin中的实现
class NewsDBHelper private constructor(context: Context) :
SQLiteOpenHelper(context, NewsDBConfig.DB_NAME, null, NewsDBConfig.VERSION_CODE) {companion object {
private var mNewsDBHelper: NewsDBHelper? = null
fun getInstance(context: Context): NewsDBHelper? {
if (mNewsDBHelper == null) {
synchronized(NewsDBHelper::class.java) {
if (mNewsDBHelper == null) {
mNewsDBHelper = NewsDBHelper(context)
}
}
}
return mNewsDBHelper
}
}
}
构造方法
情况1
- Java中的实现
public class MyView extends View {
public MyView(Context context) {
super(context);
}public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
- Kotlin中的实现
class MyView : View {
constructor(context: Context) : super(context) {}constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {}constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context,attrs,defStyleAttr) {}
}
情况2
- java中的实现
public class MyView1 extends View {
public MyView1(Context context) {
this(context,null);
}public MyView1(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}public MyView1(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
- Kotlin中的实现
class MyView1 @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr)
或者
class MyView2 : View {
@JvmOverloads
constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : super(context, attrs, defStyleAttr) {}
lambda的应用
无参数
- 常规写法
fun print() {
println("HelloWorld")
}
- lambda标准写法
var print1: () -> Unit = {println("HelloWorld1")}
- lambda简写
var print2 = {println("HelloWorld2")}
有参数加法
- 常规写法
fun add(x: Int, y: Int): Int {
return x + y
}
- lambda标准写法
var add1: (Int, Int) -> Int = { x, y -> x + y }
- lambda简写
var add2 = { x: Int, y: Int -> x + y }
作为函数参数
- 一般写法
fun add3(x: Int, y: Int): Int {return x * y}
fun add4(a: Int, b: Int): Int {return a + b}
//调用
var result = add4(1, add3(2, 3))
- lambda写法
fun add5(x:Int,add6:(Int,Int)->Int):Int{
return x + add6.invoke(2,3)
}
//调用
var result5 = add5(1,{x:Int,y:Int -> x*y})
- lambda写法
fun add7(x:Int,add8:(Int)->Boolean):Int{
if(add8(x)){
return x
}else{
return 0
}
}
//调用1
var add81 = add7(10,{x:Int -> x > 0})
//调用2
var add82 = add7(10,{it > 0})
匿名函数
- 标准写法
fun add(x: Int, y: Int): Int {
return x + y
}
或者
fun add1(x: Int, y: Int): Int = x + y
- 匿名写法
var add2 = fun(x: Int, y: Int): Int {
return x + y
}
- 匿名写法
var add3 = fun(x: Int, y: Int): Int = x + y
闭包
1.函数嵌套
fun test1() {
println("test1")
fun test2() {
println("test2")
}
}
2.函数作为返回值
fun test2(x: Int): () -> Int {
var a = 0
return fun(): Int {
a++
return a + x
}
}
//调用
var test = test2(10)
println(test())
println(test())
println(test())
【Kotlin-简约之美-进阶篇(十八)(与Java的较量)】3.函数作为返回值
fun test3(v: Int): (Int, Int) -> Int {
var a = 1
var b = 2
return { x, y -> x + y + a + b + v}
}
//调用
var test2 =test3(10)
var result = test2(12,1)
println(result)
学习交流
欢迎入群交流学习,Android、Java开发技术交流群
- QQ群:810970432
- email:geduo_83@163.com
文章图片
推荐阅读
- 《数据结构与算法之美》——队列
- retrofit2-kotlin-coroutines-adapter|retrofit2-kotlin-coroutines-adapter 超时引起的崩溃
- iOS开发技术之美—iOS入门技术的基础学习
- 【专业书】1.《时节之美》
- 如果你要问,简约时尚又高大上的图片哪里找()
- 白T恤简约不简单,你知道怎么选择白T恤吗()
- 不可预见之美(醒走拉萨第2天)20180713
- 【巍山古城——独有的建筑之美】
- 宝泉之美在山韵|宝泉之美在山韵,宝泉之美在水意
- 「RIA学习力」《系统之美》No.1,撸啦啦