gpt4 book ai didi

java - 当类已知时创建(盒装)原始实例

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:41:14 27 4
gpt4 key购买 nike

我需要一个返回所提供类类型实例的方法。让我们假设提供的类型被限制为可以创建它们的“空”实例。例如,提供 String.class 将返回一个空字符串,提供一个 Integer.class 将返回一个初始值为零的 Integer,等等。但是我如何即时创建(盒装)原始类型?像这样?

public Object newInstance(Class<?> type) {
if (!type.isPrimitive()) {
return type.newInstance(); // plus appropriate exception handling
} else {
// Now what?
if (type.equals(Integer.class) || type.equals(int.class)) {
return new Integer(0);
}
if (type.equals(Long.class) // etc....
}
}

是遍历所有可能的原始类型的唯一解决方案,还是有更直接的解决方案?注意这两个

int.class.newInstance()

Integer.class.newInstance()

抛出 InstantiationException(因为它们没有空构造函数)。

最佳答案

我怀疑最简单的方法是有一张 map :

private final static Map<Class<?>, Object> defaultValues = 
new HashMap<Class<?>, Object>();
static
{
defaultValues.put(String.class, "");
defaultValues.put(Integer.class, 0);
defaultValues.put(int.class, 0);
defaultValues.put(Long.class, 0L);
defaultValues.put(long.class, 0L);
defaultValues.put(Character.class, '\0');
defaultValues.put(char.class, '\0');
// etc
}

幸运的是,所有这些类型都是不可变的,因此可以在每次调用相同类型时返回对相同对象的引用。

关于java - 当类已知时创建(盒装)原始实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1728650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com