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 destekler ([u]int{8,16,32,64}_t, float, double, ve enums), ayrıca dizeler, arayüzler, güvenli_birleşme türleri, struct türleri ile desteklenen HIDL türlerinin dizileri ve vektörleri. 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ğerdir, yani uint32_t bir 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. Sıralama sınıfı başka bir enum sınıfından türetildiğinde 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, şu türe sahip bir SomeBaseEnum: uint8_t:

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 tipi olarak kullanılır. Ayrıca String HIDL'ye geçirildiğinde boş olmamalıdır.

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

Android 11, handle ve memory tür. Bunlar android.os.NativeHandle diline çevrilir Sırasıyla android.os.HidlMemory. Boş herkese açık kullanıcı adı geçerli olarak kabul edilir, null ise 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, yinelenmesi veya saklanması gerekmez geçerlidir. Ancak herkese açık kullanıcı adları için alınan çıkış bağımsız değişkenleri, otomatik olarak oluşturulmuş koda dayanır ve işlem tamamlandığında düzgün bir şekilde kapatılmalıdır. Bu durum, bağımsız değişkenler, yöntemin döndürülen değerleri olarak görünür (tek dönüş değeri durumunda) veya eşzamanlı geri çağırma stili (birden çok dönüş değeri durumunda kullanılır).

Çoğaltma ve kapatma hakkında daha fazla bilgi edinmek için Java sınıflarıyla ilgili belgelere göz atın.

Diziler ve vektörler

Diziler Java dizilerine, vektörler de ArrayList<T> burada T uygun nesne türüdür, muhtemelen sarmalama skaler türleri (ör. vec<int32_t> => ArrayList<Integer>) içerir. Örnek:

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

... şu hale 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ün kendi .java'sı olur çıkış dosyası olarak ayarlayın (Java'nın gerektirdiği şekilde). Örneğin, types.hal dosyası, iki ekstra dosyanın oluşturulmasına neden oluyor (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).