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

2014-11-24 10:46:26 · 作者: · 浏览: 1
ublic T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
public class T {
public static void main(String[] args) {
Info info = new Info(); //设置泛型类型为String
info.setVar("itmyhome");
fun(info); //此处无法传递类型不匹配
}
public static void fun(Info obj){ //接受Object泛型类型的info对象
System.out.println(obj.getVar());
}
}使用?通配符

[java] class Info{
private T 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 Info(); //设置泛型类型为String
info.setVar("itmyhome");
fun(info);
}
public static void fun(Info< > obj){ //接受 泛型类型的info对象
//obj.setVar("change"); //使用?只能接受 不可以修改
System.out.println(obj.getVar());
}
}

class Info{
private T 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 Info(); //设置泛型类型为String
info.setVar("itmyhome");
fun(info);
}
public static void fun(Info< > obj){ //接受 泛型类型的info对象
//obj.setVar("change"); //使用?只能接受 不可以修改
System.out.println(obj.getVar());
}
}
如果使用?意味着可以接受任意的内容,但是此内容却无法直接使用< >修饰的泛型对象进行修改。

受限泛型

之前设置泛型类型的时候,实际上都是可以任意设置的,只要是类就可以设置,但是在java的泛型中可以指定一个泛型的上限和下限

在引用传递中,泛型操作中也可以设置一个泛型对象的范围上限和范围下限。范围上限使用extends关键字声明,表示参数化的类型可能是所指定的类型,或者是此类型的子类,而范围下限使用super进行声明,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object类。

设置上限

[java] class Info{
private T var;
public T getVar() {
return 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(); //定义泛型类型为String
info1.setVar(23);
info2.setVar(50.0f);
info3.setVar("itmyhome");
fun(info1);
fun(info2);
fun(info3); //泛型上限设置为Number 无法进行传递
}
public static void fun(Info< extends Number> obj){ //只能接受Number及其Number的子类
System.out.println(obj.getVar());
}
}

class Info{
private T var;
public T getVar() {
return 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(); //定义泛型类型为String
info1.setVar(23);
info2.setVar(50.0f);
info3.setVar("itmyhome");
fun(info1);
fun(info2);
fun(info3); //泛型上限设置为Number 无法进行传递
}
public static void fun(Info< extends Number> obj){ //只能接受Number及其Number的子类
System.out.println(obj.getVar());
}
}
设置下限

[java] class Info{
private T var;
public T getVar() {
return 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());
}
}

class Info{
private T var;
public T getVar() {
retu