15 泛型

1.泛型类

public class Holder<T> {
    T a;
    public Holder(T a) {
        this.a = a;
    }
    public static void main(String[] args) {
        new Holder<Shape>(new Circle());///只能存入Shape或者是其子类
        /////new Holder<Circle>(new Shape());  编译错误
    }
}

class Shape{
    void fun(){
        System.out.println("Shape");
    }
}

class Circle extends Shape{
    @Override
    void fun() {
        System.out.println("Circle");
    }
}

2.泛型方法

public class GenericMethod {
    
    public <T> T f(T x){
        return x;
    }
    
    public <T> String v(T x){
        return x.getClass().getName();
    }
    
    public <T> List<T> asList(T... args) {
        List<T> list = new ArrayList<>();
        for(T t:args){
            list.add(t);
        }
        return list;
    }
    
    public static void main(String[] args) {
        GenericMethod g = new GenericMethod();
        
        g.f("fuck"); //////自动类型推断,自动推断只会发生在赋值操作
        
        g.<String>f("you");  /////显式类型说明,一般不用
        
        List<String> list = g.asList("I fuck you".split(" ")); ////可变参数与泛型方法
        System.out.println(list);
        
        System.out.println(g.v(1));
    }
}

3.擦除

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 泛型实现了参数化类型的概念,使代码可以应用于多种类型。泛型术语的意思是适用于许多许多的类型。泛型在编程语言中出现时...
    Lemon_Home阅读 259评论 0 0
  •   在Effective中讲到泛型之处提到了一个概念,类型擦除器,这是什么呢?接下来我们跟随这篇文章探索类型擦除的...
    凌云_00阅读 2,176评论 0 8
  • 泛型是Java 1.5引入的新特性。泛型的本质是参数化类型,这种参数类型可以用在类、变量、接口和方法的创建中,分别...
    何时不晚阅读 3,067评论 0 2
  • 官方文档: http://kotlinlang.org/docs/reference/generics.html ...
    lioilwin阅读 589评论 0 0
  • object 变量可指向任何类的实例,这让你能够创建可对任何数据类型进程处理的类。然而,这种方法存在几个严重的问题...
    CarlDonitz阅读 938评论 0 5