首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Cursor 是接口還是集合?為什麼有實例?

     編輯:程式設計綜合問答

核心澄清

Cursor 是接口(android.database.Cursor),**不能直接實例化**。

為何代碼中出現 Cursor cursor = db.query(...)?

SQLiteDatabase.query() 返回的是 **實現了 Cursor 接口的具體類實例**(如 SQLiteCursor、CursorWrapper、AbstractCursor 子類)。

  • 源碼註釋:Implementations should subclass AbstractCursor.
  • 實際類型可用 cursor.getClass().getName() 打印查看。

為何 Cursor 方法無 abstract 關鍵字?

Java 8+ 接口默認方法可有實現(default),但 Cursor 多為抽象方法。**IDE 顯示的源碼可能是反編譯或框架代碼**,實際 AbstractCursor 中方法已有默認實現或標註 abstract。

類比理解


// 定義接口
interface Cursor { void moveToFirst(); }

// 實現類
class SQLiteCursor implements Cursor { public void moveToFirst() { ... } }

// 使用
Cursor c = new SQLiteCursor(); // 實例是 SQLiteCursor,類型聲明為 Cursor

總結

  • 文章說「Cursor 是每行的集合」是**概念描述**,指其行為像結果集游標。
  • 代碼中 Cursor cursor = ... 是**多態**:接口類型變量引用實現類對象。
  • 查看實際類:Log.d("TAG", cursor.getClass().getName());
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved