Java通用接口性能
发布时间:2020-05-29 00:30:18 所属栏目:Java 来源:互联网
导读:简单的问题,但我猜是棘手的答案. 使用通用接口会损害性能吗? 例: public interface StuffT { void hello(T var);}vspublic interface Stuff { void hello(Integer var); ---- Integer used just as an example} 我的第一个想法是,它没
|
简单的问题,但我猜是棘手的答案. 使用通用接口会损害性能吗? 例: public interface Stuff<T> {
void hello(T var);
}
vs
public interface Stuff {
void hello(Integer var); <---- Integer used just as an example
}
我的第一个想法是,它没有.泛型只是语言的一部分,编译器会优化它,好像没有泛型(至少在通用接口的这种特殊情况下). 它是否正确? 解决方法由于编译器有时会添加合成桥接方法,因此可能会出现轻微的性能损失.请考虑以下示例:public class GenericPerformance {
public static void main(final String[] args) {
final Stuff<Integer> stuff = new IntStuff();
final Integer data = stuff.getData();
stuff.putData(data);
}
}
interface Stuff<T> {
T getData();
void putData(T stuff);
}
class IntStuff implements Stuff<Integer> {
private Integer stuff;
public Integer getData() {
return stuff;
}
public void putData(final Integer stuff) {
this.stuff = stuff;
}
}
如果查看生成的字节码,您将看到:在main方法中,擦除了接口方法 java.lang.Object Stuff.getData() void Stuff.putData(java.lang.Object) 被调用.那个方法,在IntStuff中用签名实现 java.lang.Object getData() void putData(java.lang.Object) 两者都用修饰符公共桥合成,委托给“真实”方法 java.lang.Integer IntStuff.getData() void putData(java.lang.Integer) 第一个合成方法只返回Integer结果,而第二个合成方法在调用putData(Integer)之前执行从Object到Integer的转换. 如果将stuff变量更改为IntStuff类型,则调用两个Integer方法而不是合成Object方法. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
