【问题标题】:Generic Object typecasting通用对象类型转换
【发布时间】:2012-03-02 06:32:53
【问题描述】:

我有一个对象,想将通用对象转换为类对象。我认为以下应该有效。但它没有:

Object o1=itr.next();
Class cls=o1.getClass();
Object obj=(cls) o1;

错误可能是什么?我怎样才能正确地做到这一点?

更新:这里我有属于不同类的对象列表。我将在每个循环中使用每个类来转换为 XML 或 JSON 字符串。为此,我想获取它所属的类和对象。

【问题讨论】:

  • 你想用这个做什么

标签: java casting


【解决方案1】:

您必须在Class 对象上调用cast method

cls.cast(o1)

【讨论】:

    【解决方案2】:

    这个语法:

    Object obj=(cls) o1;
    

    不允许。您只能转换为 type 并且 clsClass 类型的 object,而不是类型本身。你想用这个来完成什么?你也可以这样写:

    Object obj = o1;
    

    因为任何引用类型都与 Object 赋值兼容(此外,o1 已经属于 Object 类型)。

    【讨论】:

    • 所以无论如何要进行类型转换??..我不能直接指定类,因为它可以是类的集合...
    • @CodeJack:请编辑您的问题以解释您要做什么。
    • @CodeJack 你想把o1 转换成它的实际类型?您不能真正做到这一点,至少使用您向我们展示的代码片段。通常,itr 是一个泛型类(也就是说,它有某种类型参数),类型参数定义了它返回的对象的具体类型。
    • 是的......所以创建的类将是什么?......只是类或它所属的原始类???
    • @CodeJack 当你调用o1.getClass() 时,你会得到一个o1 的实际类的实例。但是,您的代码仍然不知道该类是什么。我真的不知道你想要完成什么。你能提供一些上下文吗?我看到您接受了一个解决方案并评论说“它的工作原理”。 “工作”是什么意思?
    【解决方案3】:
    Object o1=itr.next();
    Class cls=o1.getClass();
    Object obj=(cls) o1; //whats does it make sense casting Object by object? o1 and obj both are object
    

    它可以通过类型T而不是类进行转换

    【讨论】:

    • 没错,在Object 类型的变量中引用一个强制转换的对象是没有意义的。但它对于调用它的方法很有用(这可能是 OP 想要做的):cls.cast(o1).clsHasAMagicMethod().
    • @Koraktor 如果cls 是一些已知的类,那将是有意义的,但是 OP 的代码唯一能让你得到的就是另一个 Object,因为 cls 没有任何声明的泛型类型参数.
    • @Koraktor id 我们知道clsHasAMagicMethod() 的名字然后我们必须知道类所以我们可以做更简单的((classname) o1).clsHasAMagicMethod()
    • @All.感谢您的澄清。我只需要将类型转换的对象传递给其他函数,该函数返回对象的 XML 结构。
    • @Nirmal-thInkbeYond:是的,我必须承认我的样本也过于简化了。但是你也可以尝试反射方法,或者像 CodeJack 那样,将对象传递给其他方法。
    【解决方案4】:

    如果您的迭代器返回的对象实际上是 Class 类型,这可能会起作用:

    Object o1=itr.next();
    Class clazz = (Class)o1;
    

    说实话,你的问题我不是很清楚。

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多