Veri türleri

Bir HIDL arayüz dosyasına göre, Java HIDL arka ucu Java arayüzleri oluşturur, Saplama ve Proxy kodu. Tüm skaler HIDL türlerini ([u]int{8,16,32,64}_t, float, double, ve enums) desteklemenin yanı sıra dizeleri, arayüzleri, safe_union türlerini, struct türlerini ve desteklenen HIDL türlerinin dizilerini ve vektörlerini destekler. Java HIDL arka ucu birlik türlerini veya fmq türlerini DESTEKLEMEZ. Android 11 sürüm, memory desteği ekler ve handle tür.

Java çalışma zamanı, imzasız tam sayı kavramını yerel olarak desteklemediğinden, tüm imzasız türler (ve bunlara dayalı sıralamalar) sessizce eşdeğeri imzalanır.Örneğin, uint32_t değerindeki işaretin int haline gelir. Java arayüzü. Değer dönüşümü yapılmaz; uygulama uzmanı Java tarafı, imzalı değerleri imzalanmamış gibi kullanmalıdır.

Numaralandırmalar

Enum'lar, Java enum sınıflarını oluşturmaz ancak bunun yerine iç sınıfa çevrilir sınıfları içerir. Enum sınıfı başka bir enum sınıfından türetilmişse bu sınıfın depolama türünü devralır. İmzalanmamış bir tam sayı türüne dayalı numaralandırmalar, eşdeğerdir. Temel tür temel tür bir öğe olduğundan, enum alanları/değişkenleri, sıfır numaralandırıcı olmadığında bile sıfırdır.

Örneğin, uint8_t türüne sahip bir SomeBaseEnum:

enum SomeBaseEnum : uint8_t { foo = 3 };
enum SomeEnum : SomeBaseEnum {
    quux = 33,
    goober = 127
};

... şu hale gelir:

public final class SomeBaseEnum { public static final byte foo = 3; }
public final class SomeEnum {
    public static final byte foo = 3;
    public static final byte quux = 33;
    public static final byte goober = 127;
}

Ve:

enum SomeEnum : uint8_t {
    FIRST_CASE = 10,
    SECOND_CASE = 192
};

… şu şekilde yeniden yazılır:

public final class SomeEnum {
    static public final byte FIRST_CASE  = 10;  // no change
    static public final byte SECOND_CASE = -64;
}

Yaylı Çalgılar

Java'da String, utf-8 veya utf-16'dır ancak utf-8'e dönüştürülür ortak HIDL türü olarak bulunur. Ayrıca, String, HIDL'ye aktarılırken null olmamalıdır.

Herkese açık kullanıcı adı ve bellek

Android 11, handle ve memory tür. Bunlar sırasıyla android.os.NativeHandle ve android.os.HidlMemory olarak çevrilir. Boş herkese açık kullanıcı adı geçerli olarak kabul edilirken, null değildir.

Oluşturulan sunucu kodunda, alınan bellek ve işleyici bağımsız değişkenleri yalnızca yöntem çağrısı kapsamında geçerlidir. Sunucu uygulaması, ömür boyu, yinelenen dup() yöntemleri kullanılarak yinelenmelidir. İlgili içeriği oluşturmak için kullanılan döndürülen örnek, yöntem çağrısı dışında kullanılabilir ve tamamlandığında uygun şekilde kapatılmalıdır somut olarak ortaya koyar.

Oluşturulan client kodunda, herkese açık kullanıcı adları ve bellek örnekleri Çağrılan yöntemin giriş bağımsız değişkenleri olarak gönderilen için yinelenmesi veya saklanması gerekmez geçerlidir. Ancak çıkış bağımsız değişkenleri olarak alınan tutamaç ve bellek örnekleri, otomatik olarak oluşturulan kod tarafından otomatik olarak kopyalanır ve kullanımdan kaldırıldığında uygun şekilde kapatılmalıdır. Bu durum, döndürülen bağımsız değişkenlerin yöntemin döndürülen değerleri olarak (tek döndürülen değer durumunda) veya senkron geri çağırma stili kullanılarak (birden fazla döndürülen değer durumunda) görünmesi durumunda geçerlidir.

Kopyalama ve kapatma hakkında daha fazla bilgi için Java sınıflarının belgelerine bakın.

Diziler ve vektörler

Diziler Java dizilerine, vektörler ise ArrayList<T> (T, uygun nesne türü olup vec<int32_t> => ArrayList<Integer> gibi skaler türleri sarmalayabilir) olarak çevrilir. Örneğin:

takeAnArray(int32_t[3] array);
returnAVector() generates (vec<int32_t> result);

… şu hâle gelir:

void takeAnArray(int[] array);
ArrayList<Integer> returnAVector();

Yapılar

Yapılar, benzer bir düzenle Java sınıflarına dönüştürülür. Örneğin, örnek:

struct Bar {
 vec<bool> someBools;
};
struct Foo {
 int32_t a;
 int8_t b;
 float[10] c;
 Bar d;
};

... şu hale gelir:

class Bar {
 public final ArrayList<Boolean> someBools = new ArrayList();
};
class Foo {
 public int a;
 public byte b;
 public final float[] c = new float[10];
 public final Bar d = new Bar();
}

Bildirilen türler

types.hal içinde tanımlanan her üst düzey tür, kendi .java çıkış dosyasını alır (Java'nın gerektirdiği şekilde). Örneğin, aşağıdaki types.hal dosyası iki ek dosyanın oluşturulmasına neden olur (Foo.java ve Bar.java):

struct Foo {
 ...
};

struct Bar {
 ...

 struct Baz {
 };

 ...
};

Baz'ın tanımı Bar'ın statik iç sınıfındadır (Bar.java).