我需要使用以下签名调用函数。
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, ....);
答案 0 :(得分:0)
据我所知,你的问题不是关于cast(处理编译时声明的类型),而是转换(处理运行时类型的对象)。
考虑对String.valueOf()
参数使用Object
方法。对于Integer
和String
,它将生成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或字符串,除非你使用一些丑陋的逻辑来查看什么字符值由...组成,但除非值始终为整数或字符串,否则不会是万无一失。
您是否需要传递整数或者只能将所有内容作为字符串传递?