【问题标题】:Convert Object to Class Type将对象转换为类类型
【发布时间】:2018-11-27 07:19:03
【问题描述】:

我有一个函数返回的类类型,并且想将我的对象转换为该类型。下面是代码:

Object valueData; //This is holding some data as Object
Class className = getClassFromFunction(); //className = MyValueClass

//Object val = (className.getClass()) valueData;
boolean validate = validate(valueData); //Failing

这里的验证函数不接受参数作为对象,它将接受作为类的类型(类名)

boolean validate(MyValueClass req){
} 

如何将 Object 转换为 MyValueClass?

【问题讨论】:

  • (MyValueClass) valueData ?
  • 或者className.cast(valueDate).
  • 就像其他演员一样:MyValueClass req = (MyValueClass) valueData;
  • @vincrichaud 实际上我的 className 对于每个请求都会有所不同,所以我不能将它直接转换为 (MyValueClass)
  • @usr_11 如果您的validate 方法需要MyValueClass 作为其参数的类型,则必须将参数转换为MyValueClass。期间。

标签: java class casting


【解决方案1】:

首先,您必须了解强制转换和决定选择哪个重载方法...发生在编译时。与多态性相反,重载是在编译时决定的。

因此,给定一组固定的、已知的“目标”类,instanceof 的以下级联虽然看起来很丑陋,但可以解决:

if (someObject instanceof A) {
  foo((A) someObject);
  return;
} 
if (someObject instanceof B) {
  foo((B) someObject);
  return;
} 

请注意:这里没有使用反射的“解决方法”。反射在运行时开始,如上所述,您在编译时需要所有信息。

如果有的话,您将不得不退后一步,看看是否有办法将您的重载方法转变为多态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2011-05-06
    • 2017-03-19
    • 1970-01-01
    • 2021-08-11
    • 2010-10-19
    相关资源
    最近更新 更多