【发布时间】:2010-10-19 23:33:43
【问题描述】:
我有子类,每个子类与其他成员一起携带不同类型的值。可能有LongObject、IntObject、StringObject等。
会给我一个值,可以是long、int、string等,我要分别创建一个LongObject、IntObject、StringObject等。
像下面 (a) 所示重载方法会更快还是只使用下面 (b) 所示的 elseif 会更快?
这可能不是明显的性能差异。无论如何,重载方法可能以与 if/else 类似的方式实现。我不知道。
我也可以听到你们中的一些人说只是测试它。当然,我应该这样做。我也想知道这种类型的重载是如何在后台处理的,如果有人知道的话。
请告诉我你的想法。
谢谢, jbu
一)
BaseObject getObject(long l)
{
return new LongObject(l);
}
BaseObject getObject(int i)
{
return new IntObject(i);
}
BaseObject getObject(String s)
{
return new StringObject(s);
}
...
b)
BaseObject getObject(Object x)
{
if(value is a long)
return new LongObject((Long)x);
else if(value is an int)
return new IntObject((Int)x);
else if(value is a String)
return new StringObject((String)x);
...
}
编辑:我想我并没有完全添加所有细节,你们中的一些人抓住了它。对于这两种选择,我仍然必须获取一个对象/值,并根据该值确定它是什么类型。因此,我仍然需要执行某种 if/else 操作才能使用重载方法。
【问题讨论】:
-
我对此类问题的个人哲学:时间吧!在每一个上运行几百万次迭代,看看哪一个需要更长的时间。
-
我就知道有人会这么说:)
-
只需创建一个测试并自己回答。
标签: java optimization polymorphism conditional overloading