Java:更快的重载或if / else
|
我有儿童班,每个班级都有其他成员带来不同类型的价值.可能有LongObject,IntObject,StringObject等.
我将获得一个值,可以是long,int,string等,我必须分别创建一个LongObject,StringObject等. 如下所示重载方法会更快(a),或者只使用如下所示的elseif(b)? 它可能不是一个明显的性能差异.可能是重载方法以与if / else类似的方式实现.我不知道. 我也可以听到你们中的一些人说要测试一下.当然,我应该.如果有人知道的话,我也想知道如何在引擎盖下处理这种类型的重载. 请让我知道你在想什么. 谢谢, 一个) 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某种甚至使用重载方法. 解决方法
这里有一个巨大的差异:在编译时选择重载,而你的“if(值很长)”将是执行时测试.
如果您在编译时知道类型,我强烈建议您使用该信息.如果不这样做,那么重载选项无论如何都不可行. 编辑:评论建议我详细说明在编译时选择的重载. 编译器根据有关参数的编译时信息选择调用哪个方法签名.这与覆盖的方法不同,其中使用的方法实现由方法的实际目标的类型确定. 这是一个例子: public class Test
{
public static void main(String[] args)
{
Object x = "I'm a string";
foo(x);
}
public static void foo(String x)
{
System.out.println("foo(String)");
}
public static void foo(Object x)
{
System.out.println("foo(Object)");
}
}
这会打印foo(Object),因为x的编译时类型是Object,而不是String. x引用的对象的执行时类型是String并不意味着调用foo(String). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
