एक्सपोर्ट किए जाने वाले कॉन्स्टेंट

अगर कोई इंटरफ़ेस Java के साथ काम नहीं करता है (उदाहरण के लिए, यूनियन का इस्तेमाल करता है), तो भी कॉन्स्टेंट (एनोटेशन की वैल्यू) को Java वर्ल्ड में एक्सपोर्ट करना बेहतर हो सकता है. इस स्थिति में, hidl-gen -Ljava-constants … की मदद ली जा सकती है. यह पैकेज में मौजूद इंटरफ़ेस फ़ाइल(फ़ाइलों) से एनोटेट की गई एनम डेक्लेरेशन को निकालता है और [PACKAGE-NAME]-V[PACKAGE-VERSION]-java-constants नाम की एक Java लाइब्रेरी बनाता है. एक्सपोर्ट किए जाने वाले हर सूची के एलान के लिए, इस तरह से एनोटेट करें:

@export
enum Foo : int32_t {
  SOME_VALUE,
  SOME_OTHER_VALUE,
};

ज़रूरत पड़ने पर, एनोटेशन-पैरामीटर name जोड़कर, इस टाइप को Java वर्ल्ड में जिस नाम से एक्सपोर्ट किया जाता है वह इंटरफ़ेस एलान में चुने गए नाम से अलग हो सकता है:

@export(name="JavaFoo")
enum Foo : int32_t {
  SOME_VALUE,
  SOME_OTHER_VALUE,
};

अगर Java कन्वेंशन या निजी प्राथमिकता में एनम टाइप की वैल्यू में एक सामान्य प्रीफ़िक्स जोड़ने के लिए कहा जाता है, तो एनोटेशन-पैरामीटर का इस्तेमाल करें value_prefix:

// File "types.hal".

package android.hardware.bar@1.0;

@export(name="JavaFoo", value_prefix="JAVA_")
enum Foo : int32_t {
  SOME_VALUE,
  SOME_OTHER_VALUE,
};

इससे बनी Java क्लास कुछ इस तरह दिखती है:

package android.hardware.bar.V1_0;

public class Constants {
  public final class JavaFoo {
    public static final int JAVA_SOME_VALUE = 0;
    public static final int JAVA_SOME_OTHER_VALUE = 1;
  };
};

आखिर में, types.hal में एनोटेट किए गए 'enum' टाइप के लिए, Java टाइप का एलान, दिए गए पैकेज में क्लास Constants में किया जाता है. किसी इंटरफ़ेस के चाइल्ड के तौर पर एलान किए गए एनम टाइप, उस इंटरफ़ेस की Java क्लास के एलान के तहत ग्रुप किए जाते हैं.