自学内容网 自学内容网

Java 泛型系列练习

        GenericsExercise

package genericsExercise;

import pojo.MyList;

public class GenericsExercise {
    public static void main(String[] args) {
        // 泛型可以用在类、方法、接口中

        // 泛型类
        // 在自定义MyList类中限定泛型为String,那么该MyList对象只能添加String类型的元素
        MyList<String> myList = new MyList<>();
        // 添加String类型的元素成功
        myList.add("hello");
        myList.add("world");
        // 添加非String类型元素失败,编译时报错
//        myList.add(123);
//        myList.add('a');
        // 获得集合中元素,无需进行类型转换即可使用子类的特有方法
        // 因为有了泛型,在实现get方法的时候,就可以直接进行类型转换了,集合中只有一种类型的元素,所以说转换不会报错
        byte[] bytes = myList.get(0).getBytes();
        for (byte aByte : bytes) {
            System.out.println(aByte);
        }

        System.out.println(myList.getSize());
    }
}

        泛型继承:泛型不能继承;但是数据可以继承

        GenericsExtendsExercise

package genericsExercise;

import java.util.ArrayList;

/**
 * 泛型继承
 * 泛型不具备继承性!
 * 但是数据是具备继承性的
 *
 */
public class GenericsExtends {
    public static void main(String[] args) {
        ArrayList<GrandFather> arrayList1 = new ArrayList<>();
        ArrayList<Father> arrayList2 = new ArrayList<>();
        ArrayList<Son> arrayList3 = new ArrayList<>();

        // 验证泛型不具备继承性
        // 方法中的ArrayList的泛型限定为GrandFather,若泛型具备继承性,那么传递List1、2、3都可以成功调用这个方法
        // 但是传递List2、3调用这个方法都编译报错了:
        // 需要的类型:ArrayList<GrandFather>提供的类型:ArrayList<Father>
        // 需要的类型:ArrayList<GrandFather>提供的类型:ArrayList<Son>
        // 这就可以说明泛型是不具备继承性的
//        testMethod(arrayList1);
//        testMethod(arrayList2);
//        testMethod(arrayList3);

        // 验证数据具备继承性
        // 在添加集合中的数据的时候,是具备继承性的,添加泛型限定类的子类也是可以的
        // 就像是集合的原始使用,其中底层数组是Object,所以说可以添加Object的子类(也就是一切类)
//        arrayList1.add(new GrandFather());
//        arrayList1.add(new Father());
//        arrayList1.add(new Son());

        // 泛型通配符的使用
        // 使用泛型通配符:<? extends GrandFather> 此处的泛型就可以是一切GrandFather的子类
        method(arrayList1);
        method(arrayList2);
        method(arrayList3);

        method2(arrayList1);
        method2(arrayList2);
        method2(arrayList3);

        // 使用泛型通配符:<? super Son> 此处的泛型就可以是一切Son的父类

    }

    /**
     * 测试泛型不具备继承性的方法
     *
     * @param arrayList
     */
    public static void testMethod(ArrayList<GrandFather> arrayList) {
        System.out.println(arrayList);
    }

    /**
     * 测试泛型通配符的方法
     * 可以使用泛型通配符
     * 无界通配符 ? 代表一切对象
     * 上界通配符 ? extends Object   代表一切Object的子类(包括Object本身)
     * 下界通配符 ? super Object   代表一切Object的父类(包括Object本身)
     * @param arrayList
     */
    public static void method(ArrayList<? extends GrandFather> arrayList) {
        // 可以使用一切GrandFather的子类
        System.out.println(arrayList);
    }

    public static void method2(ArrayList<? super Son> arrayList) {
        // 可以使用一切Son的父类
        System.out.println(arrayList);
    }

}

/**
 * 这是三个简单的类,其中具备一个简单的继承结构,只是为了验证泛型的继承性
 */
class GrandFather {}

class Father extends GrandFather{}

class Son extends Father{}

        泛型方法

package genericsExercise;

/**
 * 泛型方法
 * 因为不知道方法具体可以接收什么类型的参数,所以说可以使用泛型方法,用泛型的方法指代具体的参数方法
 */
public class GenericsMethod {
    public static void main(String[] args) {
        // 因为是泛型方法,可以传递任何类型的参数
        printWord("hello");
        printWord(123);
        printWord('a');
        printWord(new Student("张三", 18));

    }

    /**
     * 一个简单的打印方法,但是因为不知道具体要打印什么类型的参数,所以说需要使用泛型
     *
     * @param t
     * @param <T>
     */
    public static <T> void printWord(T t) {
        System.out.println(t);
    }
}

class Student{
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student: " + this.name + " age: " + this.age;
    }
}

 

 


原文地址:https://blog.csdn.net/Aishangyuwen/article/details/143824399

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!