5

私はアンドロイドでSQLiteを学んでいます。SQLite については、developer.android.com を参照しています。しかし、コードを読んでいるときに混乱しました。彼らはクラスFeedReaderContractのインスタンス化を防ぐためにコンストラクターを書きましたが、どこにもクラスととの間の関係をFeedReaderContract定義していません。FeedReaderContractFeedReaderContractFeedEntry

これが私が参照しているリンクです。コードを提供します。openhelper クラスで内部クラスを定義するにはどうすればよいですか。誰かが私に良い方法を提案してもらえますか?.

たとえば、次のスニペットは、1 つのテーブルのテーブル名と列名を定義します。

public static abstract class FeedEntry implements BaseColumns 
{
    public static final String TABLE_NAME = "entry";
    public static final String COLUMN_NAME_ENTRY_ID = "entryid";
    public static final String COLUMN_NAME_TITLE = "title";
    public static final String COLUMN_NAME_SUBTITLE = "subtitle";
    ...
}

コントラクト クラスが誤ってインスタンス化されるのを防ぐには、空のコンストラクターを指定します。

 //Prevents the FeedReaderContract class from being instantiated.
private FeedReaderContract() {}
4

1 に答える 1

4

私は次のように理解しています:

public static class FeedReaderContract{

    // Prevents the FeedReaderContract class from being instantiated.
    private FeedReaderContract() {} 

    //The FeedEntry table definition
    public static abstract class FeedEntry implements BaseColumns {
        public static final String TABLE_NAME = "entry";
        public static final String COLUMN_NAME_ENTRY_ID = "entryid";
        public static final String COLUMN_NAME_TITLE = "title";
        public static final String COLUMN_NAME_SUBTITLE = "subtitle";
        ...
    }

    //more tables definition
}

したがって、コントラクトをインスタンス化することはできませんが、すべての内部クラスの定数にアクセスできます。例の行のように:

private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedReaderContract.FeedEntry.TABLE_NAME + " (" +
FeedReaderContract.FeedEntry._ID + " INTEGER PRIMARY KEY," //continues

class 内の内部クラスのFeedEntry定数 (TABLE_NAMEおよび) にアクセスします。_IDFeedReaderContract

それが役に立てば幸い。

于 2013-01-16T09:11:35.877 に答える