当前位置:  开发笔记 > 编程语言 > 正文

Java泛型 - 擦除概念

如何解决《Java泛型-擦除概念》经验,为你挑选了1个好方法。

我有一些代码如下:

public class java_generic {

    public static void main(String[] args) {

        T t = new X();
        t.m(new Object());
        t.m(new String());

    }

    static class T {
         void m (E e){
            System.out.println("here is T");
        }
    }

    static class X extends T {
        void m (String o){
            System.out.println("here is X");            
        }
    }

}


从我的理解,在类型擦除后,课程T将成为这样:

    static class T {
        void m (Object e){
            System.out.println("here is T");
        }
    }

并且m超载.

m(Object)m(String),我希望结果会是

here is T
here is X

但结果是

here is T
here is T

我想知道为什么结果会这样.



1> Sebastian Re..:

你几乎回答了自己的问题.你只需要完全遵循后果.擦除所有代码,你得到这个:

public class java_generic {

    public static void main(String[] args) {
        T t = new X();
        t.m(new Object());
        t.m(new String());
    }

    static class T {
        void m (Object e){
            System.out.println("here is T");
        }
    }

    static class X extends T {
        void m (String o){
            System.out.println("here is X");            
        }
    }
}

这有望显然X.m只是不会覆盖T.m,因此通过T引用调用永远不会调用X.m.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有