0
点赞
收藏
分享

微信扫一扫

linux-arm电源管理

程序猿不脱发2 2023-06-12 阅读 56

文章目录

一、什么是 Java 泛型?

二、为什么要使用泛型

需求:存放学生的成绩

//在集合中使用泛型之前的情况:
    @Test!
    public void test(){
        ArrayList list = new ArrayList();
        list.add(99);
        list.add(98);
        list.add(97); 
        }

存在问题:

问题一:类型不安全

 list.add("Tom");

问题二:强转时,可能出现ClassCastException

for(Object score : list){
            int stuScore = (Integer) score;
            System.out.println(stuScore);
  }

在集合中使用泛型的情况:以ArrayList为例

    @Test
    public void test1(){
       ArrayList<Integer> list =  new ArrayList<Integer>();
        list.add(78);
        list.add(87);
        list.add(99);
        list.add(65);
//        list.add("Tom");
//编译时,就会进行类型检查,保证数据的安全
        for(Integer score : list){        //避免了强转操作
            int stuScore = score;

            System.out.println(stuScore);
        }     
    }

三、Java 泛型的语法

Java 泛型的核心语法包括类型参数、类型变量、类型通配符和上下界限制。

  • 1. 类型参数
class MyGenericClass<T> {}

上述代码中,类 MyGenericClass 定义了一个泛型类型参数 T,它可以用来表示任何数据类型。

  • 2. 类型变量
MyGenericClass<Integer> myGenericInt = new MyGenericClass<Integer>();

上述代码中,我们使用泛型类型参数 T 来定义一个整数类型变量 myGenericInt,并且在实例化类对象时将类型参数 T 替换为具体类型 Integer。

  • 3. 类型通配符
    类型通配符使用问号 ? 表示,表示可以接受任意类型的参数。例如:
List<?> myList;

上述代码中,我们定义了一个泛型列表 List,并使用类型通配符 ? 表示可以接受任何类型的数据。

  • 4. 上下界限制
    1. 上界限制
      上界限制用来限制类型参数的范围,表示类型参数必须是指定类型或指定类型的子类。例如:
class MyGenericClass<T extends Number> {}

上述代码中,我们定义了一个泛型类型参数 T,并使用上界限制 extends Number 表示类型参数必须是 Number 类型或其子类类型。

    1. 下界限制
      下界限制用来限制类型参数的范围,表示类型参数必须是指定类型或指定类型的父类。例如:
void myMethod(List<? super Integer> myList) {}

上述代码中,我们定义了一个方法 myMethod,并使用下界限制 super Integer 表示方法参数必须是 Integer 类型或其父类类型的列表。

四、Java 泛型的应用

  • 1. 类泛型
    类泛型就是在定义一个类时,在其中定义一个包含泛型类型参数的变量。例如:

java
public class MyGenericClass {
private T element;

public MyGenericClass(T element) {
    this.element = element;
}

public T getElement() {
    return element;
}

public void setElement(T element) {
    this.element = element;
}

}
上述代码中,我们定义了一个泛型类 MyGenericClass,它的类型参数为 T,我们在其中定义了一个变量 element,它的类型为 T,这样就可以用来存储任意类型的数据。

  • 2. 方法泛型
public class MyGenericMethod {
    public <T> void printArray(T[] array) {
        for (T element : array) {
            System.out.println(element.toString());
        }
    }
}

上述代码中,我们定义了一个泛型方法 printArray,它接受一个泛型数组类型作为参数,使用 for-each 循环遍历数组并打印出每个元素的字符串表示。

  • 3. 接口泛型
public interface MyGenericInterface<T> {
    public T doSomething();
}

上述代码中,我们定义了一个泛型接口 MyGenericInterface,它声明了一个泛型方法 doSomething,返回值类型为 T。

五、Java 泛型的示例

下面我们来看一些 Java 泛型的示例代码,以帮助读者更好地理解和使用 Java 泛型。

public class MyContainer<T> {
    private T element;

    public MyContainer(T element) {
        this.element = element;
    }

    public T getElement() {
        return element;
    }

    public void setElement(T element) {
        this.element = element;
    }

    public static void main(String[] args) {
        MyContainer<Integer> myInt = new MyContainer<>(10);
        MyContainer<String> myString = new MyContainer<>("Hello, World!");
        System.out.println(myInt.getElement());
        System.out.println(myString.getElement());
    }
}
public class MyGenericMethod {
    public static <T> T pickOne(T a, T b) {
        return Math.random() < 0.5 ? a : b;
    }

    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "World";
        Integer int1 = 10;
        Integer int2 = 20;
        System.out.println(pickOne(str1, str2));
        System.out.println(pickOne(int1, int2));
    }
}
public interface MyGenericInterface<T> {
    public T doSomething();
}

public class MyGenericClass implements MyGenericInterface<String> {
    @Override
    public String doSomething() {
        return "Hello, World!";
    }

    public static void main(String[] args) {
        MyGenericClass myGeneric = new MyGenericClass();
        System.out.println(myGeneric.doSomething());
    }
}

六、总结

好书分享

在这里插入图片描述

618,清华社 IT BOOK 多得图书活动开始啦!活动时间为 2023 年 6 月 7 日至 6 月 18 日,清华
社为您精选多款高分好书,涵盖了 C++、Java、Python、前端、后端、数据库、算法与机器学习等多
个 IT 开发领域,适合不同层次的读者。全场 5 折,扫码领券更有优惠哦!快来查看详情 !

图书链接:Node.js从基础到项目实践(视频教学版)

举报

相关推荐

0 条评论