Kotlin-简约之美-进阶篇(六):与Java的较量

在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
        }
    }
}
发布了114 篇原创文章 · 获赞 923 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/geduo_83/article/details/104394494