获取基元类型的默认值

2022-08-31 17:30:38

我手头有一个Java原语类型:

Class<?> c = int.class; // or long.class, or boolean.class

我想为这个类获取一个默认值 - 具体来说,如果此类型的字段未初始化,则该值将分配给它们。例如,对于数字,对于布尔值。0false

有没有通用的方法可以做到这一点?我试过这个:

c.newInstance()

但是我得到的是 一个 ,而不是一个默认实例。InstantiationException


答案 1

番石榴图书馆已经包含:
http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Defaults.html

调用将返回任何基元类型(由 JLS 指定)的默认值,对于任何其他类型返回 null。defaultValue

像这样使用它:

import com.google.common.base.Defaults;
Defaults.defaultValue(Integer.TYPE); //will return 0

答案 2

通过创建一个元素的数组并检索其第一个值,可以获取任何类型的默认值。

private static <T> T getDefaultValue(Class<T> clazz) {
    return (T) Array.get(Array.newInstance(clazz, 1), 0);
}

这样就不需要考虑每个可能的基元类型,而创建一个单元素数组的代价通常可以忽略不计。