从接口到实现类的转换的性能开销

时间:2014-04-12 11:19:10

标签: java performance interface casting

假设我有一个接口Vehicle和一个实现Car。类Car有一个名为getNumberCylinders()的方法,它不属于Vehicle接口。因此,在我的代码中,我需要将Vehicle实例强制转换为类Car,以便调用此方法。

这样的演员是否会产生性能开销,而不是将此方法包含在接口中并直接调用该方法而不进行强制转换?

2 个答案:

答案 0 :(得分:1)

  

这样的演员是否会产生性能开销,而不是将此方法包含在接口中并直接调用该方法而不进行强制转换?

在这种情况下,是的,因为该对象可能不是Car,因此Java必须进行运行时检查,这就是抛出ClassCastExceptions的方式。 JVM规范#2.6.8。

如果你必须这样做,你通常会在设计阶段做错事。我会重新考虑你的对象模型。

答案 1 :(得分:0)

如果您认为所有车辆都应具有'气缸数',那么最好将该方法添加到车辆界面。否则,铸造完全没问题。在运行时,强制转换根本不会修改您的对象。 Casting更多地与编译检查有关。 虽然Java规范本身并不保证它将是0纳秒操作,但是由于转换操作没有明显的性能开销报告。 在我的应用程序中,我会更多地担心不必要的数据库命中和对象创建,而不仅仅是输入类型。

相关问题