java学习笔记08--泛型 (三)

2014-11-24 10:46:26 · 作者: · 浏览: 2
rn var;
}
public void setVar(T var) {
this.var = var;
}
}
public class T {
public static void main(String[] args) {
Info info1 = new Info();
Info info2 = new Info();
Info info3 = new Info();
info1.setVar("itmyhome");
info2.setVar("object");
info3.setVar(23);
fun(info1);
fun(info2);
fun(info3); //泛型下限受限 ,无法进行传递
}
public static void fun(Info< super String> obj){ //只能接受String和Object类型的泛型
System.out.println(obj.getVar());
}
}
解释:泛型与子类继承的限制

一个类的子类可以通过对象的多态性,为其父类实例化,但是在泛型操作中,子类的泛型类型是无法使用父类的泛型类型接受的,例如:Info不能使用Info接受

泛型接口

之前的所有操作都是在类中直接使用泛型操作的,那么,对于java来说,也可以直接在接口中定义及使用泛型。

泛型接口实现的两种方式

定义子类,在子类的定义上也声明泛型类型

[java] interface Info{ //在接口上定义泛型
public T getVar(); //定义抽象方法 抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info{ //定义泛型接口的子类
private T var;
public InfoImpl(T var){
this.var = var;
}
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}

}
public class T {
public static void main(String[] args) {
Info info = new InfoImpl("itmyhome");
System.out.println(info.getVar());
}
}

interface Info{ //在接口上定义泛型
public T getVar(); //定义抽象方法 抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info{ //定义泛型接口的子类
private T var;
public InfoImpl(T var){
this.var = var;
}
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}

}
public class T {
public static void main(String[] args) {
Info info = new InfoImpl("itmyhome");
System.out.println(info.getVar());
}
}
如果现在实现接口的子类不想使用泛型声明,则在实现接口的时候直接指定好操作的类型即可。

[java] interface Info{ //在接口上定义泛型
public T getVar(); //定义抽象方法 抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info{ //定义泛型接口的子类,直接指定类型
private String var;
public InfoImpl(String var){
this.var = var;
}
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}

}
public class T {
public static void main(String[] args) {
Info info = new InfoImpl("itmyhome");
System.out.println(info.getVar());
}
}

interface Info{ //在接口上定义泛型
public T getVar(); //定义抽象方法 抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info{ //定义泛型接口的子类,直接指定类型
private String var;
public InfoImpl(String var){
this.var = var;
}
public String getVar() {
return var;
}
public void setVar(String var) {
this.var = var;
}

}
public class T {
public static void main(String[] args) {
Info info = new InfoImpl("itmyhome");
System.out.println(info.getVar());
}
}
泛型方法

[java] class Demo{
public T fun(T var){
return var;
}
}
public class T {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
System.out.println(d1.fun("itmyhome"));
System.out.println(d2.fun(23));
}
}

class Demo{
public T fun(T var){
return var;
}
}
public class T {
public static void main(String[] args) {
Demo d1 = new Demo();
Demo d2 = new Demo();
System.out.println(d1.fun("itmyhome"));
System.out.println(d2.fun(23));
}
}