java中的泛型

java中的泛型是伪泛型。

在这里插入图片描述

package com.gaofeng.day03;

import java.util.ArrayList;

public class Demo06 {
    public static void main(String[] args) {
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();
        ArrayList<Student> list4 = new ArrayList<>();

        /**
         * 接受任意类型的参数
         * 泛型通配符
         */
        method(list1);
        method(list2);
        method(list3);


        /**
         * 传递指定类型的参数
         */
        method2(list1);
//        method2(list3);
        method2(list2);
//        method2(list4);

    }
    public  static <E> void method(ArrayList<E> list){

    }

    /**
     * extends E 表示只能接受E类型或者E类型的子类
     * super E 表示只能接受E类型或者E类型的父类
     * @param list
     */
    public static void method2(ArrayList<? super Fu> list){

    }
}

class Ye{}
class Fu extends  Ye{}
class Zi extends Fu{}

class Student{}
package com.gaofeng.day03;

import java.util.ArrayList;

public class Demo07 {
    public static void main(String[] args) {

        ArrayList<LihuaCat> list1 = new ArrayList<>();
        ArrayList<PersianCat> list3 = new ArrayList<>();
        ArrayList<Husky> list2 = new ArrayList<>();
        ArrayList<Teddy> list4 = new ArrayList<>();


        keepPet(list1);
        keepPet(list3);
        keepPet(list2);
        keepPet(list4);

        keepPet2(list1)
        keepPet2(list3);
        keepPet2(list2);
        keepPet2(list4);
    }

    /**
     * 只能养猫,不能养狗
     * @param list
     */
    public static void keepPet(ArrayList<? extends Cat> list){

    }
    /**
    只能养狗,不能养猫
    */
    public static void keepPet2(ArrayList<? extends Dog> list){

    }
    /**
    *  只能是动物类,其他类不行
    */
    public static void keepPet3(ArrayList<? extends Animal> list){

    }

}


abstract class Animal{
    private String name;
    private int age;

    public Animal(){}
    public Animal(String name, int age){
        this.name = name;
        this.age = age;
    }

    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }

    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
    public abstract void eat();
    @Override
    public String toString(){
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

abstract class Cat extends Animal{

}

class PersianCat extends Cat{
    @Override
    public void eat() {
        System.out.println(getName() + "PersianCat eat" + getAge() + "岁的波斯猫,正在吃饼干");
    }
}

class LihuaCat extends Cat{
    @Override
    public void eat() {
        System.out.println(getName() + "LihuaCat eat" + getAge() + "岁的狸花猫,正在吃鱼");
    }
}


abstract class Dog extends Animal{

}

class Teddy extends Dog{
    @Override
    public void eat() {
        System.out.println(getName() + "Teddy eat" + getAge() + "岁的泰迪,正在吃骨头");
    }
}

class Husky extends Dog{
    @Override
    public void eat() {
        System.out.println(getName() + "Husky eat" + getAge() + "岁的哈士奇,正在吃肉");
    }
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
泛型Java编程语言的一个功能,它允许在定义类、接口和方法时使用类型参数。泛型的主要目的是为了提供更强的类型检查和消除代码的类型转换。泛型可以用在类、接口、方法和构造器,并且可以应用于任何类型,包括基本类型。 泛型的基本用法可以分为以下几类: 1. 泛型类和接口 使用泛型类和接口可以编写更为通用的代码,不依赖于指定的具体数据类型。例如: ```java public class Box<T> { private T t; // T stands for "Type" public void set(T t) { this.t = t; } public T get() { return t; } } ``` 在这个例子,`Box<T>`是一个泛型类,`T`是一个类型变量,表示该类的实例可以存储任何类型的对象。 2. 泛型方法 泛型方法可以在普通的非泛型定义。例如: ```java public class Util { public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) { return p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue()); } } ``` 这个`compare`方法使用了两个类型参数`K`和`V`,并应用于`Pair<K, V>`类型的参数。 3. 泛型通配符 泛型通配符`<?>`用于创建那些可以工作于多种不同数据类型的泛型类或方法。例如: ```java public void processElements(List<?> elements) { for(Object element : elements) { // do something with element } } ``` 在这里,`processElements`方法可以处理任何类型的`List`对象。 4. 类型通配符的界限 使用`extends`关键字定义泛型类型的上界,用于限制泛型变量的类型。例如: ```java public class Processора<T extends Number> { public void process(T element) { // do something with T } } ``` `Processora<T>`类泛型类型`T`只能是`Number`或其子类。 5. 泛型的类型擦除 Java泛型是通过类型擦除来实现的,这意味着在运行时,泛型信息将不会存在。所有的泛型信息在编译器编译时会被擦除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值