【问题标题】:generic cast based on param基于参数的通用转换
【发布时间】:2016-04-01 19:17:33
【问题描述】:

我需要一个基于方法参数(类名)的“通用”转换。 像这样的:

void save(DomainObject o, String className) {
    doSomething((className) o);
}

所以我想将“o”直接转换为“className”类的对象。

我知道如何通过类名字符串来实例化一个对象,但是有没有简单的方法来管理我的转换问题?

【问题讨论】:

  • 我喜欢在这种情况下使用接口。所以你的对象o应该实现接口

标签: java generics casting


【解决方案1】:

在您的情况下,您似乎已经将类名作为String,在这种情况下,ManoDestra 的答案将是合适的。不过,作为替代方案,您也可以使用这种方法:

void save(DomainObject o, Class<?> type){       
    doSomething( type.cast(o) );
}

然后你会这样称呼它:

save( myObject, Integer.class );

【讨论】:

  • 这也是一个优雅的解决方案:)
  • 嗯,这看起来更适合我的情况,谢谢!
【解决方案2】:

您可以使用反射来执行此操作...

void save(DomainObject o, String className) {
    Class<?> clazz = Class.forName(className);
    doSomething(clazz.cast(o));
}

您需要处理潜在的类强制转换异常,但我相信您可以管理它:)

有关详细信息,请参阅此回复:https://stackoverflow.com/a/2127384/5969411

【讨论】:

  • 太棒了。很高兴我能帮忙:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 2012-10-23
  • 2020-04-17
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多