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.annotations
và ComGoogleCommonAnnotationsBeta
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 Beta
là GGBeta
.
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.