Java泛型-桥接方法?

与Java泛型相关的称为“桥接方法”的概念使我停下来思考一下。


顺便说一句,我只知道它发生在字节码级别,我们无法使用。


但是我很想知道Java编译器使用的“桥接方法”背后的概念。


幕后到底发生了什么,为什么要使用它?


任何有关示例的帮助将不胜感激。


幕布斯6054654
浏览 676回答 3
3回答

长风秋雁

如果您想了解为什么需要桥接方法,则最好了解没有它的情况。假设没有桥接方法。class A<T>{&nbsp; private T value;&nbsp; public void set(T newVal){&nbsp; &nbsp; value=newVal&nbsp; }}class B extends A<String>{&nbsp; public void set(String newVal){&nbsp; &nbsp; System.out.println(newVal);&nbsp; &nbsp; super.set(newVal);&nbsp; }}请注意,擦除后,由于Type参数不受限制,因此setin中的方法A成为了。有类没有方法的签名,其中相同的。因此没有覆盖。因此,当发生这种情况时:public void set(Object newVal)TBsetAA a=new B();a.set("Hello World!");多态在这里不起作用。请记住,您需要在子类中重写父类的方法,以便可以使用父类var触发多态。桥方法的作用是用名称相同但签名不同的方法的所有信息以静默方式覆盖父类中的方法。借助于桥接方法,多态性起作用了。尽管从表面上看,您可以使用具有不同签名的方法覆盖父类方法。

茅侃侃

令人惊讶的是,编译器会推断出该MyComparator方法:public int compare(Integer a, Integer b) {/* code */}正在尝试覆盖Comparator<T>的public int compare(T a, T b);从声明的类型Comparator<Integer>。否则,编译器会将MyComparators compare作为附加(重载)方法,而不是覆盖该方法。因此,将不会为此创建桥方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java