侧边栏壁纸
博主头像
Johnny博主等级

学无先后,达者为师

  • 累计撰写 11 篇文章
  • 累计创建 4 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

泛型中的桥方法

Johnny
2022-03-05 / 0 评论 / 2 点赞 / 92 阅读 / 339 字

​ 桥方法是在看泛型的时候看到的,书上写的比较晦涩难懂,就另开一篇来写一下在泛型中桥方法的具体实现

先上代码

public class A<T> {
    private T value;
    public T getValue(){
        return this.value;
    }

    public void setValue(T value){
        this.value = value;
    }
}


public class B extends A<String>{
    public void setValue(String value){
        System.out.println("in B");
    }
}

由于在JVM中没有泛型,在进入到JVM之前泛型将会被擦除,在这个例子中擦除之后的类型为Object即:

public class A {
    private Object value;
    public Object getValue(){
        return this.value;
    }

    public void setValue(Object value){
        this.value = value;
    }
}

再回来看B中的方法,B继承了A,并且重载了B中的setValue 方法,但是B又继承A中的setValue方法即 B中应该是这样的:

public class B extends A<String>{
    public void setValue(String value)
    public void setValue(Object value)
}

这就会导致冲突,所以JVM会自动生成一个桥方法,把B变换成:

public class B extends A<String>{
    public void setValue(String value){...}
    public void setValue(Object value){
    	setValue((String) value);
    }
}

就是在继承的父类的方法中调用了子类重载的方法。

所以桥方法就是在子类继承父类之后,将子类继承的方法加入一条语句去调用子类重载的方法。

2

评论区