泛型

作者: 寂静的春天1988 | 来源:发表于2020-05-13 11:44 被阅读0次

    https://blog.csdn.net/s10461/article/details/53941091

    1、泛型类

    public class Demo {
        public static void main(String[] args) throws CloneNotSupportedException {
            ObjectTool<String> tool=new ObjectTool();
            tool.show("123");
        }
    }
    
    class ObjectTool<T>{
        public void show(T t) {
            System.out.println(t);
        }
    }
    

    2、泛型方法

    public class Demo {
        public static void main(String[] args) throws CloneNotSupportedException {
            ObjectTool tool=new ObjectTool();
            tool.show("123");
        }
    }
    
    class ObjectTool{
        public <T>void show(T t) {
            System.out.println(t);
        }
    }
    

    3、泛型接口

    public class Demo {
        public static void main(String[] args) throws CloneNotSupportedException {
            new ObjectToolImpl<String>().show("123");
        }
    }
    
    interface ObjectTool<T>{
        public <T>void show(T t);
    }
    class ObjectToolImpl<T> implements ObjectTool<T>{
    
        @Override
        public <T> void show(T t) {
            System.out.println(t);
        }
        
    }
    

    4、泛型通配符
    泛型通配符的作用在我看来有点像,正则表达式,用来限制右边存入的对象。


    image.png

    可以看到编译期间,一旦在左边限定死了类型,那么右边也必须传该类型,无论是Object还是子类,都会报错。
    而泛型通配符就是来解决这个问题的,可以使限定的类型更加的灵活。

    1、任意类型<?>

    public class Demo {
        public static void main(String[] args){
            Collection<?> list1 = new ArrayList<Animal>();
            
            Collection<?> list2 = new ArrayList<Object>();
            
            Collection<?> list3 = new ArrayList<Dog>();
            
            Collection<?> list4 = new ArrayList<Cat>();
        }
    }
    

    2、向上限定,e及其子类。Collection<? extends E>


    image.png

    3、向下限定,e及其父类。


    需要注意的是,通配符只是限定右边的类型,右边还是要确定类型的。真正add的时候也必须传右边的类型(右边类型就有多态了)。

    相关文章

      网友评论

          本文标题:泛型

          本文链接:https://www.haomeiwen.com/subject/dgwndqtx.html