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). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |