Luk*_*der 12 java reflection initialization default-value
我有一个Class<?>任意类型的参考.如何获得该类型的初始化值?是否有一些库方法或我必须自己滚动,如:
Class<?> klass = ...
Object init =
(klass == boolean.class)
? false
: (klass == byte.class)
? (byte) 0
...
: (Object) null;
Run Code Online (Sandbox Code Playgroud)
用例是我有一个任意java.lang.reflect.Method引用,我想用任意参数调用(对于某些测试),这可能不是null在参数是基本类型的情况下,所以我需要指定该类型的某个值.
Hol*_*ger 20
要在没有第三方库的情况下执行此操作,您可以创建一个长度为1的数组并读出其第一个元素(两个操作都通过java.lang.reflect.Array):
Object o = Array.get(Array.newInstance(klass, 1), 0);
Run Code Online (Sandbox Code Playgroud)
从Java 9开始,您也可以使用
Object o = MethodHandles.zero(klass).invoke();
Run Code Online (Sandbox Code Playgroud)
您可以使用Defaultsguava库中的类:
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));
}
Run Code Online (Sandbox Code Playgroud)
打印:
false
0
null
Run Code Online (Sandbox Code Playgroud)