泛型入门

java集合有个缺点——将一个对象放进集合之后,该对象的编译类型就会变成Object类型(其运行时类型不变)编译时不检查对象的类型。

泛型概念:java的参数化类型,即在创建集合时指定集合元素的类型。

如,List<String> strList=new ArrayList<String>();  后面的String可省略不写

strList.add(5);   会引起编译错误,因为已经指定strList 集合存放的数据类型为String类型了,不能存放其他类型的对象。输出时不用强制类型转换。

泛型实质:允许在定义接口、类和方法时使用类型形参,类型形参将在声明变量、创建对象和调用方法时动态的指定。

 1 public class Apple<T> {
 2     private T info;
 3     public Apple(){    
 4     }    // 构造器名依然为Apple,而不是Apple<T>
 5     public  Apple(T info){
 6         this.info=info;    
 7     }
 8 
 9     public static void main(String[] args) {
10         Apple<String> a1=new Apple<>("苹果");
11         System.out.println(a1.info);
12         Apple<Double> a2=new Apple<>(23.56);
13         System.out.println(a2.info);
14     }
15 
16 }

从泛型类派生子类

 可以从带泛型声明的接口、类中创建其实现类或继承类,此时使用这些接口或类时不能包含类型形参

public class A extends Apple<T>{}    此处为错误写法

public class A extends Apple<String>{}  此处为正确写法   

public class A extends Apple    使用类或接口时也可以不形参传入实参

调用方法是必须为所有的数据形参出入参数值。

不能在静态方法、静态变量和静态代码块的声明和初始化中使用类型参数。

public class B<T> {
    static T t1;
    public static void study(T t1){    
    }
}
原文地址:https://www.cnblogs.com/peng111/p/5648436.html