码迷,mamicode.com
首页 > 编程语言 > 详细

java基础 泛型

时间:2017-11-07 16:29:23      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:log   擦除   画布   info   集合   out   成员类   string   .class   

1.泛型集合中的元素是存在继承关系的

public class Main {
    public static void main(String[] args) {
        List<Shape> list=new ArrayList<Shape>();
        list.add(new Circle());
        list.add(new Rectangle());
    }
}

class Canva {
    public void drawAll(List<? extends Shape> list) {
        for (Shape s : list) {
            s.draw(this);
        }
    }
}

abstract class Shape {
    public abstract void draw(Canva c);
}

class Circle extends Shape {
    @Override
    public void draw(Canva c) {
        System.out.println("在画布" + c + "画圆");
    }
}

class Rectangle extends Shape {
    @Override
    public void draw(Canva c) {
        System.out.println("在画布" + c + "画矩形");
    }
}

 

2.泛型类中的泛型不能设置到静态成员中

泛型实际上就是将运行时期出现的错误,放到编译时期,在运行时实际会擦除泛型类型,静态成员属性类成员,所有对象共享,如果运行泛型类型那么也就是在实例中静态成员的类型可以不一样,这样违背了java静态成员的语法

class Apple<T>{
    public static T color; //泛型类型不能应用到静态成员上

    private T info;

    public Apple() {
    }

    public Apple(T info) {
        this.info = info;
    }

    public T getInfo() {
        return info;
    }

    public void setInfo(T info) {
        this.info = info;
    }
}

 

3.在编写泛型类子类时,继承的泛型类必须是原生类或泛型类型明确的泛型类

原因:如果创建c类对象,实际jvm也会为我们创建父类Apple类的对象,但是Apple类中成员类型缺是未知的

class A extends Apple<String>{

}

class B extends Apple{

}

class C extends Apple<T>{  //错误

}

 

4.泛型类不是真正的类
泛型类不是真正的类,只是编译时期的一种类型表示方式,在运行时期会擦除泛型类型变成原生类,比如:List<String>不存在这种类型的类,也不会生成对应的class文件,运行时期原生类时List,产生的class文件是List.class ,所以对于List<String>.class或instanceof的使用都是错误的

public class Main {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        System.out.println(List<String>.class); //错误
        
        if(list instanceof List<Object>){ //错误
            
        }
    }
}

 

  

  

  

java基础 泛型

标签:log   擦除   画布   info   集合   out   成员类   string   .class   

原文地址:http://www.cnblogs.com/tomcuper/p/7799241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!