泛型

泛型

Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常

泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。

泛型类

泛型类就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来….这样的话,用户明确了什么类型,该类就代表着什么类型…用户在使用的时候就不用担心强转的问题,运行时转换异常的问题了。

// <T> 表明这是一个泛型类
public class ObjTool<T> {
    public T obj;
    public T getObj() {
        return obj;
    }
    public void setObj(T obj) {
        this.obj = obj;
    }
}

泛型方法

定义泛型方法….泛型是先定义后使用的

class ObjTool{
    // <T> 表明这是一个泛型方法
        public <T> T getT(T t){
            return t;
        }
        public <T> void print(T t){
            System.out.println(t);
        }
    }

泛型接口

// <T> 表明这是一个泛型接口
public interface Inter<T> {
    public abstract void show(T t);

}
  • 实现类的要是重写父类的方法,返回值的类型是要和父类一样的!

  • 类上声明的泛形只对非静态成员有效

类型通配符

泛型中的<Object>并不是像以前那样有继承关系的,也就是说List<Object>List<String>是毫无关系的,所以需要有通配符代表所有类型

?号通配符表示可以匹配任意类型,任意的Java类都可以匹配…..

当我们使用?号通配符的时候:就只能调对象与类型无关的方法,不能调用对象与类型有关的方法

设定通配符上限

List<? extends Number> List集合装载的元素只能是Number的子类或自身

设定通配符下限

<? super Type> 传递进来的只能是Type或Type的父类

无论是设定通配符上限还是下限,都是不能操作与对象有关的方法,只要涉及到了通配符,它的类型都是不确定的!

 

原文地址:https://www.cnblogs.com/yjh1995/p/13514559.html