I have a Class<?>
reference for an arbitrary type. How to get that type's initialisation value? Is there some library method for this or do I have to roll my own, such as:
Class<?> klass = ...
Object init =
(klass == boolean.class)
? false
: (klass == byte.class)
? (byte) 0
...
: (Object) null;
The use case is I have an arbitrary java.lang.reflect.Method
reference, which I want to call using arbitrary parameters (for some testing), which may not be null
in case the parameter is a primitive type, so I need to specify some value of that type.
To do it without 3rd party libraries, you may create an array of length one and read out its first element (both operations via java.lang.reflect.Array
):
Object o = Array.get(Array.newInstance(klass, 1), 0);
Starting with Java 9, you could also use
Object o = MethodHandles.zero(klass).invoke();
You can use Defaults
class from guava library:
public static void main(String[] args) {
System.out.println(Defaults.defaultValue(boolean.class));
System.out.println(Defaults.defaultValue(int.class));
System.out.println(Defaults.defaultValue(String.class));
}
Prints:
false
0
null
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With