gpt4 book ai didi

java - 在 Java 中构建通用初始化函数

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:33:15 25 4
gpt4 key购买 nike

我正在尝试想出一个函数,让我可以传入任何对象和默认值,如果无法将对象转换为默认值的类型,它应该返回该默认值。如果对象为空,它也应该返回默认值。

应该这样使用:

Integer myVar = ConversionHelper.initialize( "123", 0 ) // should return Integer(123)
Integer myVar = ConversionHelper.initialize( "hello", 0 ) // should return Integer(0)

等等

我尝试了以下代码:

public static <T> T initialize(Object o, T def) {
T ret;

try {
ret = (T) o;
} catch (Exception e) {
ret = def;
}

return ret==null ? def : ret;
}

但它无法进行基本转换,例如将 Integer 转换为 String。

编辑:采纳了答案中的许多建议,现在我正在寻找一种方法来做到这一点,而无需出现在我的答案中的一系列 if..elseif...elseif 和 try catch block

最佳答案

这就是你要找的:

public static <T> T initialize(Object o, T def) {

if ( o == null ) return def;

if ( def == null ) throw new NullPointerException("Null def");

if ( !def.getClass().isAssignableFrom(o.getClass()) ) {
return def;
} else {
return (T) o;
}

}

但是,您不能在问题中提到的原始类型上使用它。您需要将它们装箱到对象中才能使用此方法。

编辑

如果 null 是一个有效的选项,那么:

public static <T> T initialize(Object o, T def) {

if ( o == null ) return def;

if ( def == null ) null;

if ( !def.getClass().isAssignableFrom(o.getClass()) ) {
return def;
} else {
return (T) o;
}

}

如果检索返回值的属性不能保存 null,您的编译器将通过错误告诉您。否则,这段代码会飞。

关于java - 在 Java 中构建通用初始化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061176/

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