在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
}
}
}