Liên kết tên lớp
Vì J2ObjC chỉ dịch các lớp Java không phải giao diện người dùng, nên một ứng dụng iOS cần làm việc trực tiếp với các lớp đã dịch. Các lớp được dịch là các lớp Target-C gốc NSObject, nhưng nó giúp bạn hiểu cách chuyển đổi tên lớp, phương thức, tham số và tên tệp tiêu đề.
Java dùng các gói để xác định không gian tên, trong khi Target-C không có gói và thay vào đó có một
quy ước đặt tiền tố dùng chung trước các lớp có liên quan (như NSObject và NSString). Người nhận
giữ nguyên không gian tên Java, tên gói được liên kết với tiền tố viết hoa kiểu lạc đà. Ví dụ:
Theo mặc định, java.util.List
được liên kết với JavaUtilList
. Bạn có thể đặt tiền tố mặc định này một cách rõ ràng
bằng cách sử dụng tùy chọn tiền tố gói của j2objc.
Tên thông số
Java phân biệt các phương thức nạp chồng theo loại đối số, trong khi Mục tiêu-C sử dụng đối số
tên. Do đó, J2ObjC tạo tên đối số từ các loại của chúng. Ví dụ: dưới đây là cách
đối tượng được chèn vào đầu ArrayList
và cách danh sách đó được thêm vào một đối tượng khác
danh sách:
[someList addWithInt:0 withId:object];
[otherList addAllWithJavaUtilCollection:somelist];
Mỗi tên đối số chứa "with" cộng với loại dữ liệu. Hơi xấu xí nhưng đảm bảo rằng luôn được gọi trong Target-C như đã thực hiện trong Java.
Tên tiêu đề
Tuy nhiên, tệp tiêu đề không có tên được ánh xạ, mà có đường dẫn tệp nguồn Java kết thúc bằng ".h" thay vì ".java". Điều này giúp các công cụ hỗ trợ như Xcode và làm cho dễ dàng hơn nhiều, nhưng ban đầu có thể hơi khó hiểu, vì:
#import "java/util/Date.h"
khai báo lớp JavaUtilDate
chứ không phải Date
.
Sử dụng tính năng dịch lớp
Ngoài các tên kỳ lạ (có thể đơn giản bằng tiền tố gói), các lớp đã dịch được sử dụng như bất kỳ lớp Target-C nào khác:
#import "java/util/BitSet.h"
...
JavaUtilBitSet *bitset = [[JavaUtilBitSet alloc] init];
[bitset setWithInt:10 withBOOL:YES];
BOOL b = [bitset getWithInt:10];