Android Framework涉及的Java语法(二)——泛型(Generic)

郏志学
2023-12-01

Android Framework涉及的Java语法——泛型(Generic)

作者:http://blog.csdn.net/gjz175 (欢迎转载,请注明作者及出处)

泛型的基本格式

使用泛型定义一个class

public class Person<T> {
    private T age;

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

    public T getAge() {
        return this.age;
    }
}
  1. 使用尖括号代表一个泛型
  2. 可以有多个变量,如:

使用class

Person类可以使用Person或者Integer作为参数。

public class Generics {
    public static void main(String args[]) {
        Person<String> p = new Person<String>();
        p.setAge("3 years old");
        System.out.println(p.getAge());

        Person<Integer> p2 = new Person<Integer>();
        p2.setAge(3);
        System.out.println(p2.getAge());
    }

使用通配符

当要使用Person作为参数时可以这样做:
使用通配符<?>

public static void printInfo(Person<?> p) {
    System.out.println(p.getAge());
}

public static <T> void printInfo2(Person<T> p) {
    System.out.println(p.getAge());
}

这种方法需要注意在void printInfo2前加上,声明T是一个泛型。

泛型的继承

继承泛型:

class Student<T> extends Person<T> {
}

继承的类不再使用泛型:

class Student2 extends Person<String> {
}

泛型的接口

可以把接口理解为一个特殊的class,这个特殊的class必须使用implements“继承”。
同样地,可以使用泛型或者不使用泛型实现接口:

interface Person<T> {
    public void setAge(T age);
    public T getAge();
}
/* 定义一个泛型类 */
class Student<T> implements Person<T> {
    T age;
    public void setAge(T age)
    {
        this.age = age;
    }
    public T getAge() {
        return this.age;
    }
}
/* 定义一个普通的类 */
class Student2 implements Person<String> {
    String age;
    public void setAge(String age)
    {
        this.age = age;
    }
    public String getAge() {
        return this.age;
    }
}

泛型的上限和下限

使用关键字extends表示方法可以接收某个类或它的子类,这就是泛型的上限

class Student<T extends Number> implements Person<T> {

}

相对应地,使用关键字supor表示方法可以接收某个类或它的父类,这就是泛型的下限

public static void printInfo(Person<? super String> p) {
    System.out.println(p.getAge());
}

关于泛型先了解到这里,多加练习。在Android framework的学习过程中需要补充java知识的时候,继续在本文更新内容。

 类似资料: