Java中泛型的定义和使用

    科技2022-08-19  95

    泛型是一种“代码模板”,可以用一套代码套用各种类型。

    定义

    泛型的定义,可以按照如下格式:

    package com.sj; public class Person<T> { private T value; public Person() { } public Person(T value) { this.value = value; } public void setValue(T value) { this.value = value; } public T getValue() { return value; } // 静态方法,泛型使用方式不同,请注意。这里的“K”已经和泛型“T”不一样了 public static <K> Person<K> newInstance(K name) { return new Person<K>(name); } }

    T就是泛型,此外,要注意类名后面一定要带着<T>

    使用

    import obj.person.Person; public class TestWhatever { public static void main(String[] args) { // 泛型设置为String Person<String> stringPerson = new Person<>(); stringPerson.setValue("秋佳"); String value = stringPerson.getValue(); // 泛型设置为Integer Person<Integer> integerPerson = new Person<>(); integerPerson.setValue(95); Integer value1 = integerPerson.getValue(); } }

    泛型可以看作是一种“代码模板”。示例中的Person类,在创建对象时可以将泛型定义为任意类,则value属性就可以是任意类型。可是如果在Person类中,将value类型设置为Object,value也可以是任意类型啊,那么为什么要使用泛型呢?这里就要提到泛型的另一个作用:限制类型。比如ArrayList,我设置泛型为String,则你只能为ArrayList中添加String类型的值,如果为它添加其他类型的值,编译器就会报错。

    public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add(new Person<Boolean>()); // 编译器报错 }

    此外,当你指定泛型之后,在取值的时候,也不需要强制转换类型。例如:

    public static void main(String[] args) { List<String> list = new ArrayList<>(); String s = list.get(0); }
    Processed: 0.019, SQL: 9