这两个内部类声明有什么区别?还评论优点/缺点?
案例A:类中的类.
public class Levels {
static public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
Run Code Online (Sandbox Code Playgroud)
和案例B:接口内的类.
public interface Levels{
public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
Run Code Online (Sandbox Code Playgroud)
纠正:放置getvalue方法.
进一步的信息:我能够在另一个没有实现接口AT ALL的类中实例化A和B两种情况下的Items类.
public class Z{//NOTE: NO INTERFACE IMPLEMENTED here!!!!
Levels.Items items = new Levels.Items();
}
Run Code Online (Sandbox Code Playgroud)
由于接口未实例化,因此接口内的所有元素都可以通过点符号访问,而无需实例化LEVELS接口,因为您无法实例化接口 - 有效地在可渗透静态引用的接口内定义类.
所以说B案例中的Items类不是静态的没有意义.由于情况A和B都以相同的方式实例化,我不是在寻找静态或内部或嵌套的语义.停止给我关于语义的答案.我想要编译器,运行时和行为差异/优点,或者如果没有,那么就这么说.没有更多的语义答案请!!!!! JVM或.NET VM规范的专家请求这个答案问题,而不是教科书语义学.
我试图看看哪些实现更适合访问Android应用程序中的sqlite数据库
使用DatabaseHelper类扩展SqliteOpenHelper并使用单例模式.在某些罕见的情况下,我确实看到崩溃,因为数据库已关闭.虽然有点刺激,但我让他们通过只是因为它在宏伟的计划和我拥有的项目数量上是次要的.
public class DBHelper extends SQLiteOpenHelper {
private static DBHelper instance;
private final String CREATE_HEALTH_DATA_TABLE = "CREATE TABLE IF NOT EXISTS my_table ( "
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ MT_FIELD_NAME + " TEXT NOT NULL );";
private DBHelper getInstance(Context c) {
if (instance == null) {
instance = new DBHelper(c);
}
return instance;
}
private DBHelper(Context c) {
super(c, "my_database.sqlite", null, 0);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
} …Run Code Online (Sandbox Code Playgroud)