泛型(黑马程序员版)
【Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)】https://www.bilibili.com/video/BV1Cv411372m?p=116&vd_source=9f87a7ce44630c11c1428c5f90d42fbb
String


集合

集合与数组相比 集合大小可变
“容器”
适用案例:购物车
ArrayList
提供创建容器对象的方式
提供相应方法对容器进行操作(增删改查)
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();//泛型约束类型
list.add("heima");
list.add("heima2");
list.add("heima3");
list.add("heima4");
//list.add(1234);//不行
System.out.println(list);
//几种方法
list.add(1,"mysql");
list.add("end");
System.out.println(list);
list.remove(1);
System.out.println(list);
}
}
泛型

泛型类
//泛型类的用法
//1.自定义的ArrayList泛型类
//E是泛型指代的对象;调用的时候应该传参进来(String抑或是自定义的类)(int等基本类型不行)
class MyArrayList<E>{
private Object[] arr = new Object[10];
private int size;//当前位置
public boolean add(E e){
arr[size++]=e;
return true;
}
public E get(int index){
if(index>size){
return null;
}
else{
return (E)arr[index];
}
}
}
//2.自定义多个参数的泛型类
class MyClass<E,T>{
public void put(E e,T t){
//可以使用多个参数
}
}
//3.限定泛型类的参数必须继承自某个类
class MyClass2<E extends Animal>{
public void put(E e){//这个E必须是Animal或者继承自Animal
}
}
class Animal{}
class Cat extends Animal{}
class Dog extends Animal{}
public class ArrayListFX {
public static void main(String[] args) {
//3.实验
MyClass2<Animal> myClass20 = new MyClass2<>();//ok
MyClass2<Cat> myClass21 = new MyClass2<>();//ok
//MyClass2<String> myClass22 = new MyClass2<>();这个会报错
}
}
泛型接口
与泛型类类似
public class InterfaceFX {
}
class Student{}
class Teacher{}
interface Data<E>{
boolean add(E e);
ArrayList<E> getByName(String name);
}
//生成的重写方法就将参数换成了泛型对应的参数
class TeacherData implements Data<Teacher>{
@Override
public boolean add(Teacher teacher) {
return false;
}
@Override
public ArrayList<Teacher> getByName(String name) {
return null;
}
}
class StudentData implements Data<Student>{
@Override
public boolean add(Student student) {
return false;
}
@Override
public ArrayList<Student> getByName(String name) {
return null;
}
}
//限定泛型类的参数必须继承自某个类也是可以的
interface MyData<E extends Animal>{
boolean add(E e);
ArrayList<E> getByName(String name);
}
泛型方法

这里前者是方法选用的泛型,是泛型方法;
后者是泛型类要求的泛型做为返回值,不是泛型方法
public class FunFX {
//泛型方法
//<>中声明了可以使用的对象;T指返回一个T对象
public static <T,E> T MyReturn(T t,E e){
return t;
}
//一个实例
public static <T extends Car> void go(ArrayList<T> arr){//注意加extends限定,不然狗也可以开车
System.out.println(arr.toString()+"开起来了");
}
public static void go1(ArrayList<? extends Car> arr){//?表示通配符,与上述写法意义相同;注意也可以用extends;还可以使用super,表只可使用该类与其父类
System.out.println(arr.toString()+"开起来了");
}
public static void main(String[] args) {
//测试泛型方法实例
BMW bmw = new BMW();
BENZ benz = new BENZ();
ArrayList<BMW> bmws = new ArrayList<>();
bmws.add(bmw);
ArrayList<BENZ> benzs = new ArrayList<>();
benzs.add(benz);
go(bmws);//[BMW@1d81eb93]开起来了
go1(benzs);//[BENZ@6e8cf4c6]开起来了
}
}
class Car{ }
class BMW extends Car{}
class BENZ extends Car{}
泛型擦除和泛型支持的类型

(不能用int,double;可以用Integer,Double)

浙公网安备 33010602011771号