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

Mục ánh xạ tên

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

Thật không may, tên gói được viết hoa kiểu lạc đà có thể làm giảm khả năng đọc mã được tạo, đặc biệt bằng các tên gói dài. Ví dụ: Chú thích thử nghiệm nằm trong gói com.google.common.annotationsComGoogleCommonAnnotationsBeta khó hơn đọc được hơn Beta.

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

Quy ước Mục tiêu-C để xác định không gian tên không chính thức là sử dụng một tiền tố chung, thường là hai chữ hoa. Khung nền tảng iOS sử dụng "NS" (từ NeXTStep). Để đơn giản hoá phiên bản thử nghiệm của Google Guava tên, một tiền tố, chẳng hạn 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 mình để ánh xạ đến tên gói. Việc này được thực hiện 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. Một cần khai báo tiền tố cho mỗi 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, do đó có thể dùng chung một tiền tố duy nhất bằng thông số kỹ thuật của gói có ký tự đại diện. Ví dụ: tất cả các gói Joda-Time có thể dùng chung tiền tố JT bằng cách sử dụng --prefix 'org.joda.time.*=JT'. Ký tự đại diện duy nhất được hỗ trợ là '*', khớp với cùng cách shell dòng lệnh thực hiện với tên tệp.

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

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

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>

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ể xác định các lớp đó bằng ngôn ngữ Java ban đầu tên lớp theo mặc định. Tuy nhiên, nếu ứng dụng có một tệp có tên prefixes.properties trong tài nguyên của ứng dụng đó gói có các tiền tố dùng để dịch, Class.forName(javaName) sẽ tìm lớp được ánh xạ.

Để thêm prefixes.properties ở trên vào ứng dụng iOS trong Xcode, hãy mở Giai đoạn tạo bản dựng của mục tiêu bản dựng , hãy mở rộng phần Sao chép tài nguyên gói rồi 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 các khái niệm tài nguyên Java ánh xạ đến iOS của chúng tôi.