【问题标题】:Type casting the `Object` type variables类型转换`Object`类型变量
【发布时间】:2011-07-03 11:51:20
【问题描述】:

我需要调用具有以下签名的函数。

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

我想传递Object 类型的变量,这些变量可能已经分配了整数或字符串的值,我希望自动执行类型转换..根据我分配给对象类型变量的值而不是显式转换像这样:-

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

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

createColumn ((String)object1, (int)object2, ....); // 因为 object1object2 的数据类型每次我在 for 中调用这个函数时都不相同循环,我希望它应该根据我分配给它的值自动转换。*所以我正在寻找这样的东西,如果可能的话:-

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

【问题讨论】:

    标签: java casting types type-conversion


    【解决方案1】:

    您可以调用以下代码,因为您不想在编译时检查类型是否匹配,

    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);
    }
    

    【讨论】:

    • me.prettyprint.hector.api.factory.HFactory cannot be applied to given types **required:** java.lang.String,java.lang.String **found:** java.lang.Object,java.lang.Object中的方法createStringColumn@
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      您需要传递整数还是可以将所有内容都作为字符串传递?

      【讨论】:

      • 我需要根据场景来传递这两个参数。这更多是运行时的选择
      • 如果它是一个或另一个而不是更复杂的对象,则创建一个函数 IsInt(String yourinput) 将值作为字符串并检查每个字符,如果每个字符都在 0- 9 然后返回真否则返回假
      猜你喜欢
      • 2019-06-22
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2020-04-19
      • 2021-12-30
      • 1970-01-01
      • 2015-09-26
      相关资源
      最近更新 更多