作者:http://blog.csdn.net/gjz175 (欢迎转载,请注明作者及出处)
public class Person<T> {
private T age;
public void setAge(T age) {
this.age = age;
}
public T getAge() {
return this.age;
}
}
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知识的时候,继续在本文更新内容。