Çeviri Referansı

Türler

  • J2ObjC, basit türler için JNI stili typedef'leri tanımlamıştır.
  • Tipik sınıf türlerinde paket büyük/küçük harfe duyarlıdır ve sınıf adının başına eklenir.
    • Oluşturulan paket ön ekini yeniden adlandırmak için Paket Önekleri konusuna bakın.
  • Temel Object type ve tüm tür değişkenler için "id" bu düzenlemelerin nedenlerinden biri.
  • Birkaç temel Java türü temel türleriyle eşlenmiştir. (ör. Dizeden NSString'e)
  • "Değişken" olarak tanımlanan alanlar için J2ObjC, C11 _Atomik(...) türlerini kullanan daha fazla typedef'e sahiptir.
  • İç türlerde iç sınıf adı, dış adın sonuna alt çizgiyle eklenir.
Java türü Hedef-C türü Objective-C değişken türü
boolean jboole volatile_jboolean
karakter Jchar volatile_jchar
bayt Jbayt volatile_jbyte
kısa video jshort volatile_jshort
int Jint volatile_jint
uzun Jlong volatile_jlong
kayan noktalı jfloat volatile_jfloat
double Jdouble volatile_jdouble
Java.lang.Nesne id volatile_id
tür değişkenleri id volatile_id
java.lang.String NSString* volatile_id
java.lang.Number NSNumarası* volatile_id
java.lang.Cloneable NSKopyalama* volatile_id
foo.bar.Mumble FooBarMumble* volatile_id
foo.bar.Mumber$Inner FooBarMumble_Inner* volatile_id

Yöntemler

Objective-C yöntemleri, Java yöntemlerinden iki önemli açıdan farklıdır. Sözdizimseldirler farklı yöntemler kullanarak parametreleri yöntem seçicinin bileşenleri arasına yerleştirebilirsiniz. Hedef-C yöntemleri Java gibi aşırı yüklemeyi desteklemez. Bu farklılıklar, parametre türlerini, oluşturulan seçicinin içine yerleştirin. Bu işlem, sayfa içi çakışmaları önlemek için olabilir.

Oluşturulan API'lerinde farklılık gösteren üç tür Java yöntemi vardır: örnek yöntemleri, statik ve oluşturucuları ele alacağız. Örnek yöntemleri, Objective-C örnek yöntemlerine dönüştürülür. Statik yöntemleri ve oluşturucuları C stili fonksiyonlara çevirir, ancak aynı zamanda Objective-C geliştiricilerine daha aşina olan bir API sağlama.

Örnek Yöntemleri

Yöntem adları şu şekilde oluşturulur:

  • Hiçbir parametre yöntemi değiştirilmez
  • Bir veya daha fazla parametre aşağıdaki kalıbı kullanıyor:
    • <java name>With<1st param keyword>:with<2nd param keyword>:with<3rd param keyword>:
  • Parametre anahtar kelime kuralları:
    • Temel türlerde anahtar kelime, Java temel öğesinin büyük harfle yazılmış adıdır. (ör. "Char")
    • Temel olmayan türler için anahtar kelime, büyük/küçük harf içeren tam nitelikli tür adıdır. (ör. "ComGoogleFoo")
    • Dizi türleri için "Dizi" anahtar kelimesi, öğe türündeki anahtar kelimeye eklenir.
Örnek Java
interface Foo {
  void bar();
  String bar(int i);
  java.util.List bar(String s, long[] l);
}
Örnek Hedef-C
- (void)bar;

- (NSString *)barWithInt:(jint)i;

- (id<JavaUtilList>)barWithNSString:(NSString *)s
                      withLongArray:(IOSLongArray *)l;

Statik Yöntemler

Örnek yöntemleriyle aynı adlandırma kuralları izlenerek bir Objective-C sınıfı yöntemi eklenir.

C stili bir işlev, aşağıdaki adlandırma kuralları kullanılarak eklenir:

  • Oluşturulan Objective-C seçiciyle başlayın. (ör. barWithInt:)
  • İki nokta üst üste işaretlerini alt çizgiyle değiştirin. (ör. barWithInt_)
  • Alt çizgiyle ayrılmış sınıf adını başa ekleyin. (ör. ComGoogleFoo_barWithInt_)
Örnek Java
package com.google;
class Foo {
  static boolean bar() { ... }
  static double bar(int[] i) { ... }
  static void bar(String s, boolean b) { ... }
}
Örnek Hedef-C
@interface Foo : NSObject

+ (jboolean)bar;

+ (jdouble)barWithIntArray:(IOSIntArray *)i;

+ (void)barWithNSString:(NSString *)s
            withBoolean:(jboolean)b;

@end

FOUNDATION_EXPORT jboolean ComGoogleFoo_bar();

FOUNDATION_EXPORT jdouble ComGoogleFoo_barWithIntArray_(IOSIntArray *i);

FOUNDATION_EXPORT void ComGoogleFoo_barWithNSString_withBoolean_(NSString *s, jboolean b);

Markalar

Objective-C kuralının ardından bir init örnek yöntemi eklenir. Oluşturucu parametresinde olduğu gibi, örnek yöntemleriyle aynı adlandırma kuralı kullanılır.

C stilinde üç işlev eklenir:

  • İlk işlev, yeni ayrılmış bir nesneyi ilk parametresi olarak kabul eder. Bu işlev genellikle bir alt sınıf oluşturucudan çağrı yapmak için kullanılır. Bu, statik ile aynı adlandırma kurallarını uygular yöntemlerine göz atın. (burada "init", yöntem adıdır)
  • Yeni nesneyi ayıracak ve başlatacak iki işlev eklenir. Bunlar birbirinden farklı öneklerine göre:
    • create_ işlevi, otomatik olarak yayınlanan bir nesneyi döndürür.
    • new_ işlevi, saklanan bir nesneyi döndürür.
Örnek Java
package com.google;
class Foo {
  Foo() { ... }
  Foo(Object a, Object b) { ... }
}
Örnek Hedef-C
@interface ComGoogleFoo : NSObject

- (instancetype)init;

- (instancetype)initWithId:(id)a
                    withId:(id)b;

@end

FOUNDATION_EXPORT void ComGoogleFoo_init(ComGoogleFoo *self);

FOUNDATION_EXPORT ComGoogleFoo *new_ComGoogleFoo_init() NS_RETURNS_RETAINED;

FOUNDATION_EXPORT ComGoogleFoo *create_ComGoogleFoo_init();

FOUNDATION_EXPORT void ComGoogleFoo_initWithId_withId_(ComGoogleFoo *self, id a, id b);

FOUNDATION_EXPORT ComGoogleFoo *new_ComGoogleFoo_initWithId_withId_(id a, id b) NS_RETURNS_RETAINED;

FOUNDATION_EXPORT ComGoogleFoo *create_ComGoogleFoo_initWithId_withId_(id a, id b);

Alanlar

Örnek Alanları (statik olmayan)

Java örneği değişkenleri, Objective-C örnek değişkenleri haline gelir. Ad, sonundaki ile aynı alt çizgi. Temel alanlar "nihai" olarak bildirildi özel bir durumdur ve örneğe çevrilmez. değişkenlerine karşılık gelir.

  • Alanlara "->" kullanılarak doğrudan erişilebilir söz dizimine uygun olmalıdır.
  • Temel alanlar doğrudan ayarlanabilir.
    • Nihai temel değerler (sabit değerler), statik sabitler gibi çevrilir. (bkz. Statik Alanlar)
  • Temel olmayan alanlar, sağlanan belirleyici işlevi kullanılarak ayarlanmalıdır:
    • ClassName_set_fieldName_(instance, value)
Örnek Java
package com.google;
class Foo {
  public int myInt;
  public String myString;
}
Örnek Hedef-C
Foo *foo = [[Foo alloc] init];

// Access a primitive field.
i = foo->myInt_;

// Set a primitive field.
foo->myInt_ = 5;

// Access a non-primitive field.
NSString *s = foo->myString_;

// Set a non-primitive field.
ComGoogleFoo_set_myString_(foo, @"bar");

Statik Alanlar

Statik değişkenlere, sağlanan alıcı ve belirleyici işlevleri kullanılarak erişilmelidir. Bu erişimci işlevleri, değişkene erişilmeden önce sınıf ilk kullanıma hazırlamanın gerçekleşmesini sağlar.

  • Statik bir alana erişme
    • ClassName_get_fieldName()
  • (Nihai olmayan) bir statik alan atama
    • ClassName_set_fieldName()
  • Temel bir statik alana işaretçi alma
    • ClassName_getRef_fieldName()
    • Yalnızca nihai ve kalıcı olmayan alanlar için kullanılabilir.

Değerleri sınıf başlatmaya bağlı olmadığından nihai temel alanlara (sabit değerler) doğrudan erişmek güvenlidir.

  • ClassName_fieldName
Örnek Java
package com.google;
class Foo {
  public static final MY_FINAL_INT = 5;
  public static int myInt;
  public static String myString;
}
Örnek Hedef-C
// Access a primitive constant field.
jint i = ComGoogleFoo_MY_FINAL_INT;   // No class initialization
i = ComGoogleFoo_get_MY_FINAL_INT();  // Class initialization

// Access a primitive field.
i = ComGoogleFoo_get_myInt();

// Set a primitive field.
ComGoogleFoo_set_myInt(5);

// Access a non-primitive field.
NSString *s = ComGoogleFoo_get_myString();

// Set a non-primitive field.
ComGoogleFoo_set_myString(@"bar");

Sıralamalar

J2ObjC, her bir Java sıralaması için iki tür oluşturur. Aşağıdaki gibi bir Objective-C sınıf türü oluşturulur: tam işlevsellik katmak istiyorum. Ayrıca, Temel kullanılarak bir C sıralaması oluşturulur çerçevenin NS_ENUM makrosu. Objective-C sınıf türü, oluşturulan tüm API tarafından kullanılır. C sıralaması veya depolama türü olarak kullanabilirsiniz.

Oluşturulan enum türleri şu şekilde adlandırılır:

  • Objective-C sınıfı, normal bir Java sınıfıyla aynı kural kullanılarak adlandırılır. (Türler konusuna bakın)
  • C sıralaması, "_Enum" ekiyle normal bir Java sınıfı olarak adlandırılır soneki kullanmanız gerekir.

Enum sabitlerine statik alanlar gibi erişilir.

Örnek Java
package com.google;
enum Color {
  RED, GREEN, BLUE
}
Örnek Objective-C Başlığı
typedef NS_ENUM(NSUInteger, ComGoogleColor_Enum) {
  ComGoogleColor_Enum_RED = 0;
  ComGoogleColor_Enum_GREEN = 1;
  ComGoogleColor_Enum_BLUE = 2;
};

@interface ComGoogleColor : JavaLangEnum < NSCopying >
+ (IOSObjectArray *)values;
+ (ComGoogleColor *)valueOfWithNSString:(NSString *)name;
@end

inline ComGoogleColor *ComGoogleColor_get_RED();
inline ComGoogleColor *ComGoogleColor_get_GREEN();
inline ComGoogleColor *ComGoogleColor_get_BLUE();

// Provides conversion from ComGoogleColor_Enum values.
FOUNDATION_EXPORT ComGoogleColor *ComGoogleColor_fromOrdinal(NSUInteger ordinal);