怎么做能上谷歌网站吗,天元建设集团有限公司刘士龙,一键生成原创视频,网站做外链软件因为 java 在编译源码时, 会进行 类型擦除, 导致泛型类型被替换限定类型(无限定类型就使用 Object). 因此为保持继承和重载的多态特性, 编译器会生成 桥方法.本文最后附录所有源码.Pair 是个泛型类, 它具有泛型方法 setSecond(T second),在经过编译时的 类型擦除 后变为 setSec…因为 java 在编译源码时, 会进行 类型擦除, 导致泛型类型被替换限定类型(无限定类型就使用 Object). 因此为保持继承和重载的多态特性, 编译器会生成 桥方法.本文最后附录所有源码.Pair 是个泛型类, 它具有泛型方法 setSecond(T second),在经过编译时的 类型擦除 后变为 setSecond(Object second).DateInterval 是 Pair 的实例化子类, 它具有方法 setSecond(LocalDate second).在 Main.main 中, 我们新建 DateInterval 对象, 并用基类 Pair 来引用它,此时调用基类的 setSecond 方法时, 我们希望它能够实现多态, 即调用 DateInterval.setSecond(LocalDate) 方法.事实上, java 编译器通过插入 桥方法 的方式, 帮助我们实现了该功能.反编译 DateInterval.class 会发现它具有两个 setSecond 方法:void setSecond(LocalDate);void setSecond(Object).并且, 在 void setSecond(Object) 中会调用 void setSecond(LocalDate), 这就是所谓的桥方法.附: DateInterval.class 反编译后的代码:Compiled from DateInterval.javapublic class com.book.chapter8.DateInterval extends com.book.chapter8.Pair {public com.book.chapter8.DateInterval();Code:0: aload_01: invokespecial #1 // Method com/book/chapter8/Pair.:()V4: returnpublic void setSecond(java.time.LocalDate);Code:0: aload_11: aload_02: invokevirtual #2 // Method getFirst:()Ljava/lang/Object;5: checkcast #3 // class java/time/chrono/ChronoLocalDate8: invokevirtual #4 // Method java/time/LocalDate.compareTo:(Ljava/time/chrono/ChronoLocalDate;)I11: iflt 1914: aload_015: aload_116: invokespecial #5 // Method com/book/chapter8/Pair.setSecond:(Ljava/lang/Object;)V19: returnpublic void setSecond(java.lang.Object);Code:0: aload_01: aload_12: checkcast #6 // class java/time/LocalDate5: invokevirtual #7 // Method setSecond:(Ljava/time/LocalDate;)V8: return}附: 其他所有源码:Pair.java:package com.book.chapter8;/*** Created by zhixiao.mzx on 2016/11/5.*/public class Pair {private T first;private T second;public Pair() {first null;second null;}public Pair(T first, T second) {this.first first;this.second second;}public T getFirst() {return first;}public void setFirst(T first) {this.first first;}public T getSecond() {return second;}public void setSecond(T second) {this.second second;}}DateInterval.java:package com.book.chapter8;import java.time.LocalDate;/*** Created by zhixiao.mzx on 2016/11/5.*/public class DateInterval extends Pair {public void setSecond(LocalDate second) {if (second.compareTo(getFirst()) 0) {super.setSecond(second);}}}Main.java:package com.book.chapter8;import java.time.LocalDate;/*** Created by zhixiao.mzx on 2016/11/5.*/public class Main {public static void main(String[] args) {DateInterval interval new DateInterval();Pair pair interval;pair.setFirst(LocalDate.now());pair.setSecond(LocalDate.now());}}