簡體   English   中英

J2ObjC:如何轉換自己的類型

[英]J2ObjC: How to translate own type

我想為平台特定的代碼創建類適配器。 例如,有2個類:

Java的:

class SQLiteAdapter {
    public void executeSql() {
        //use android.database.sqlite
    }
}

目標C

@interface SQLiteAdapter : NSObject {}
- (void)executeSql;
@end

如何“教” J2ObjC轉換Java代碼

SQLiteAdapter adapter = new SQLiteAdapter();
adapter.executeSql();

SQLiteAdapter* adapter =  [SQLiteAdapter alloc];
[adapter executeSql]

您可以使用sqlighter (j2objc兼容的庫),該庫使您可以為Android和iOS編寫一次數據庫訪問代碼。 由於它將SQLite庫包裝在兩個平台上,因此切換起來很容易。

如果您確實要實現自己的跨平台API,則通常該應用程序使用定義API的接口或抽象類,並使用諸如Dagger或Java Reflection之類的依賴項注入框架為每個平台加載單獨的實現。

以您的代碼為起點,首先使用抽象的executeSql()方法將SQLiteAdapter定義為抽象類:

public abstract class SQLiteAdapter {
  public abstract void executeSql();
}

接下來,定義一個AndroidSQLiteAdapter來擴展SQLiteAdapter並使用特定於Android的代碼實現executeSql():

class AndroidSQLiteAdapter extends SQLiteAdapter {
  public void executeSql() {
    //use android.database.sqlite
  }
}

最后,使用j2objc轉換SQLiteAdapter.java,並修改您的iOS類:

#import "SQLiteAdapter.h"
#import <sqlite3.h>

@interface IosSQLiteAdapter : SQLiteAdapter
@end

@implementation IosSQLiteAdapter
- (void)executeSql {
  // Implement using SQLite C API.
}
@end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM