Cách chỉ định tiền tố cho tên gói.

Ánh xạ tên

Java sử dụng gói để xác định không gian tên một cách không chính thức; trong khi Objective C++ có không gian tên C++, còn Objective C thì không có. Để duy trì tên duy nhất khi sử dụng các lớp từ nhiều gói, J2ObjC thêm một phiên bản viết hoa camel của gói vào trước tên loại. Ví dụ: java.util.Map được đổi tên thành JavaUtilMap.

Thật không may, tên gói được viết hoa camel có thể làm giảm khả năng đọc được mã được tạo, đặc biệt là với tên gói dài. Chẳng hạn như Chú thích beta của Google Guava nằm trong gói com.google.common.annotationsComGoogleCommonAnnotationsBeta khó đọc hơn Beta.

Xác định tiền tố gói

Quy ước Objective-C để xác định vùng chứa tên không chính thức là sử dụng tiền tố chung, thường là hai chữ cái viết hoa. Ví dụ: Khung nền tảng iOS sử dụng "NS" (từ NeXTStep). Để đơn giản hoá tên Beta của Google Guava, tiền tố như "GG" sẽ cải thiện khả năng đọc bằng cách tham chiếu BetaGGBeta.

J2ObjC hỗ trợ các nhà phát triển chỉ định tiền tố của riêng họ để liên kết với tên gói. Bạn có thể thực hiện việc này trên dòng lệnh bằng --prefix package=prefix. Để rút ngắn tất cả tên lớp trong gói của Beta, "--prefix com.google.common.annotations=GG" sẽ được sử dụng. Bạn cần có nội dung khai báo tiền tố riêng cho từng gói.

Xác định một tiền tố duy nhất cho nhiều gói

Các thư viện nhỏ hơn thường có tên lớp Java không xung đột, vì vậy, chúng có thể chia sẻ một tiền tố duy nhất với thông số kỹ thuật của gói ký tự đại diện. Ví dụ: tất cả các gói Joda-Time có thể dùng chung một tiền tố JT bằng --prefix 'org.joda.time.*=JT'. Ký tự đại diện duy nhất được hỗ trợ là "*", khớp với cách viết tên shell dòng lệnh.

Xác định nhiều tiền tố gói

Để đơn giản hoá việc chỉ định một số định nghĩa tiền tố, bạn có thể dùng tệp thuộc tính với đối số "--prefixes tệp":

cat prefixes.properties
com.google.common.annotations: GG
com.google.common.base: GG

# While GG can be used for all packages, let's mix it up.
com.google.common.collect: GC
com.google.common.io: GIO        # A prefix can be more than two characters,
com.google.common.net: GuavaNet  # a lot more!
...
j2objc --prefixes prefixes.properties <args>

Các lớp có tiền tố trong Thời gian chạy

Vì ứng dụng hoàn thiện có các lớp có tiền tố, nên bạn không thể định vị các lớp này bằng tên lớp gốc trong Java. Tuy nhiên, nếu ứng dụng có tệp có tên prefixes.properties trong gói tài nguyên kèm theo các tiền tố dùng để dịch, thì Class.forName(javaName) sẽ tìm thấy lớp đã liên kết.

Để thêm prefixes.properties vào ứng dụng iOS trong Xcode, hãy mở thẻ Giai đoạn bản dựng của mục tiêu bản dựng, mở rộng phần Tài nguyên gói sao chép và thêm tệp prefixes.properties vào danh sách đó. Tài nguyên Java có thêm thông tin về cách khái niệm tài nguyên Java liên kết với tài nguyên iOS.