对这一问题的回答另一个问题由opensas:building a generic initializer function in java通用数据类型转换方法
从他的问题很明显,他需要从任何数据类型T1
转换为另一种类型T2
。当我在这里说“数据类型”时,我的意思是限于那些通常用于表示原始数据的类型:Integer
,String
,Date
等。为了这个问题的目的,我们可以考虑原始数据被装箱。
我想知道是否有任何支持在输入和输出都推广到一组受支持的数据类型的类型之间进行转换的API。我看了一下Apache Commons' beanutils.converters package,但每个已知输入都有一个单独的转换器类。我在寻找实现类似以下签名的任何功能:
static <IN, OUT> OUT convert(IN value, Class<OUT> targetType);
否则
static <IN, OUT> OUT convert(IN value, OUT defaultValue);
这真的不会太难实现这种映射自己,无论是使用的一堆else if
块指向各种Commons Converters,或者Map<Class<?>, Converter>
出于同样的目的。但我想知道这种功能是否支持某个地方。
此外,如果这是一个重复,我很抱歉。我试着找到类似的问题,当我发现没有匹配这种情况时感到惊讶。
编辑:所以这段代码在行动中的一个例子是:
Integer i = GenericConverter.convert("123", Integer.class); //returns 123
Date d = GenericConverter.convert(1313381772316L, Date.class); //returns today's date
Boolean b = GenericConverter.convert(0, Boolean.class); //returns false
Long l = GenericConverter.convert("asdf", Long.class); //RuntimeException
UPDATE:代码,我挂接近标准瀑布和波希米亚的回答是一个很好的轻量级解决方案的BalusC(尽管它不适用于布尔转换)。如果我们想推广这些其他数据类型的转换,那么日期应该分开处理也是正确的。尽管如此,我仍然希望获得额外的答案 - 尤其是如果有更多可用的无人值守API可用的话。
你可以在操作中显示此代码吗?不能说我真的能明白你的目标是什么。 –
@Maurício - 增加了一些例子 –