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 enum
s) 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
).