J2ObjC:如何翻译自己的类型
J2ObjC: How to translate own type
我想为特定于平台的代码创建 class-adapter。
比如有2个classes:
Java:
class SQLiteAdapter {
public void executeSql() {
//use android.database.sqlite
}
}
Objective C
@interface SQLiteAdapter : NSObject {}
- (void)executeSql;
@end
如何"teach" J2ObjC 转换java 代码
SQLiteAdapter adapter = new SQLiteAdapter();
adapter.executeSql();
到
SQLiteAdapter* adapter = [SQLiteAdapter alloc];
[adapter executeSql]
您可以使用 sqlighter,一个与 j2objc 兼容的库,它允许您为 Android 和 iOS 编写一次数据库访问代码。由于它包装了两个平台上的 SQLite 库,因此很容易切换。
如果您真的想实现自己的跨平台 API,通常应用会使用定义 API 的接口或抽象 class,并为每个平台单独实现使用 Dagger 或 Java 反射等依赖注入框架加载。
以您的代码为起点,首先将 SQLiteAdapter 定义为抽象 class,使用抽象的 executeSql() 方法:
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 class:
#import "SQLiteAdapter.h"
#import <sqlite3.h>
@interface IosSQLiteAdapter : SQLiteAdapter
@end
@implementation IosSQLiteAdapter
- (void)executeSql {
// Implement using SQLite C API.
}
@end
我想为特定于平台的代码创建 class-adapter。 比如有2个classes:
Java:
class SQLiteAdapter {
public void executeSql() {
//use android.database.sqlite
}
}
Objective C
@interface SQLiteAdapter : NSObject {}
- (void)executeSql;
@end
如何"teach" J2ObjC 转换java 代码
SQLiteAdapter adapter = new SQLiteAdapter();
adapter.executeSql();
到
SQLiteAdapter* adapter = [SQLiteAdapter alloc];
[adapter executeSql]
您可以使用 sqlighter,一个与 j2objc 兼容的库,它允许您为 Android 和 iOS 编写一次数据库访问代码。由于它包装了两个平台上的 SQLite 库,因此很容易切换。
如果您真的想实现自己的跨平台 API,通常应用会使用定义 API 的接口或抽象 class,并为每个平台单独实现使用 Dagger 或 Java 反射等依赖注入框架加载。
以您的代码为起点,首先将 SQLiteAdapter 定义为抽象 class,使用抽象的 executeSql() 方法:
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 class:
#import "SQLiteAdapter.h"
#import <sqlite3.h>
@interface IosSQLiteAdapter : SQLiteAdapter
@end
@implementation IosSQLiteAdapter
- (void)executeSql {
// Implement using SQLite C API.
}
@end