Java Mapping for Optional Data Members
The mapping for optional data members in Slice classes and exceptions uses a JavaBean-style API that provides methods to get, set, and clear a member's value, and test whether a value is set. Consider the following Slice definition:
class C
{
string name;
optional(2) string alternateName;
optional(5) bool active;
}
The generated Java code provides the following API:
public class C ...
{
public C();
public C(String name);
public C(String name, String alternateName, boolean active);
public String name;
public String getAlternateName();
public void setAlternateName(String v);
public boolean hasAlternateName();
public void clearAlternateName();
public void optionalAlternateName(java.util.Optional<String> v);
public java.util.Optional<String> optionalAlternateName();
public boolean getActive();
public void setActive(boolean v);
public boolean isActive();
public boolean hasActive();
public void clearActive();
public void optionalActive(java.util.Optional<java.lang.Boolean> v);
public java.util.Optional<java.lang.Boolean> optionalActive();
...
}
If a class or exception declares any required data members, the generated class includes an overloaded constructor that accepts values for just the required members; optional members remain unset unless their Slice definitions specify a default value. Another overloaded constructor accepts values for all data members.
The has method allows you to test whether a member's value has been set, and the clear method removes any existing value for a member.
Calling a get method when the member's value has not been set raises java.util.NoSuchElementException.
The optional methods provide an alternate API that uses standard Java types to encapsulate the value:
java.util.OptionalDouble
Encapsulates a value of typedouble
java.util.OptionalInt
Encapsulates a value of typeint
java.util.OptionalLong
Encapsulates a value of typelong
java.util.Optional<T>
Encapsulates all other Slice types