键入转换`Object`类型变量

时间:2011-02-24 11:10:10

标签: java casting types type-conversion

我需要使用以下签名调用函数。

createColumn (N name, V value, Serializer<N> nameSerializer, Serializer<V> valueSerializer)

我想传递类型为Object的变量,这些变量可能已被赋值为integer或string,我希望自动执行类型转换。根据我分配给Object类型变量的值而不是这样的显式演员: -

Object object1= "MY_AGE";  //分配给对象类型变量的字符串值

Object object2= 31; //分配给对象类型变量的整数值

createColumn ((String)object1, (int)object2, ....); //由于 object1 的数据类型&amp;每次我在 for 循环中调用此函数时, object2 都不一样,我希望它应该根据我赋给它的值自动转换。*所以我我正在寻求这样的事情,如果可能的话: -

createColumn (object1, object2, ....);

3 个答案:

答案 0 :(得分:0)

据我所知,你的问题不是关于cast(处理编译时声明的类型),而是转换(处理运行时类型的对象)。

考虑对String.valueOf()参数使用Object方法。对于IntegerString,它将生成String表示。

答案 1 :(得分:0)

您可以调用以下内容,因为您不希望在编译时检查类型是否匹配,

createColumn(object1, object2, (Serializer)serializer1, (Serializer)serializer2);

编辑:这为我编译(带有“未选中”警告)

interface Serializer<T> { }
public static <N,V> void createColumn (N name, V value, Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
}

public static void main(String[] args) throws  NoSuchFieldException {
    Object object1 = "hi";
    Object object2 = 31;
    Serializer<String> serializer1 = null;
    Serializer<Integer> serializer2 = null;
    createColumn(object1, object2, (Serializer) serializer1, (Serializer) serializer2);
}

答案 2 :(得分:0)

我不认为这是可能的,你给变量一个类型对象,我不知道有什么方法可以确定它是否真的是一个int或字符串,除非你使用一些丑陋的逻辑来查看什么字符值由...组成,但除非值始终为整数或字符串,否则不会是万无一失。

您是否需要传递整数或者只能将所有内容作为字符串传递?