泛型 通配符2

来源:互联网 发布:linux怎么运行sh文件 编辑:程序博客网 时间:2024/06/06 01:31

1.泛型制定的类型不一致,编译时报错

class Info<T>
{
    private T var ;
    public void setVar(T var){
        this.var = var ;
    }
    public T getVar(){
        return this.var ;
    }
    public String toString(){
        return this.var.toString() ;
    }
}
public class GenericsDemo01
{
    public static void main(String args[]){
        Info<String> i = new Info<String>() ;
        i.setVar("MLDN") ;
        fun(i) ;
    }
    public static void fun(Info<Object> temp){
        System.out.println("内容:" + temp) ;
    }
}

D:\test\genericsdemo02>javac GenericsDemo01.java
GenericsDemo01.java:19: 错误: 无法将类 GenericsDemo01中的方法 fun应用到给定类型;

                fun(i) ;
                ^
  需要: Info<Object>
  找到: Info<String>
  原因: 无法通过方法调用转换将实际参数Info<String>转换为Info<Object>
1 个错误


2.?号表示,可以接收任意类型的泛型对象

class Info<T>
{
    private T var ;
    public void setVar(T var){
        this.var = var ;
    }
    public T getVar(){
        return this.var ;
    }
    public String toString(){
        return this.var.toString() ;
    }
}
public class GenericsDemo01
{
    public static void main(String args[]){
        Info<String> i = new Info<String>() ;
        i.setVar("MLDN") ;
        fun(i) ;
    }
    public static void fun(Info<?> temp){
        System.out.println("内容:" + temp) ;
    }
}

使用?可以接收任意的内容,但是此内容却无法使用?修饰的泛型对象进行修改

3.受限泛型

设置上限:

声明对象:          类名称<?extends 类> 对象名称

声明类:              类名称<泛型标识 extends 类>{}

设置下限

声明对象:          类名称<?super 类> 对象名称

声明类:              类名称<泛型标识 extends 类>{}


设置上限:

class Info<T>
{
    private T var ;
    public void setVar(T var){
        this.var = var ;
    }
    public T getVar(){
        return this.var ;
    }
    public String toString(){
        return this.var.toString() ;
    }
}
public class GenericsDemo02
{
    public static void main(String args[]){
        Info<Integer> i1 = new Info<Integer>() ;
        Info<Float> i2 = new Info<Float>() ;
        i1.setVar(30) ;
        i2.setVar(30.2f) ;
        fun(i1) ;
        fun(i2) ;
    }

    public static void fun(Info<? extends Number> temp){
        System.out.println(temp + "、") ;
    }
}


设置下限:

class Info<T>
{
    private T var ;
    public void setVar(T var){
        this.var = var ;
    }
    public T getVar(){
        return this.var ;
    }
    public String toString(){
        return this.var.toString() ;
    }
}
public class GenericsDemo04
{
    public static void main(String args[]){
        Info<String> i1 = new Info<String>() ;
        Info<Object> i2 = new Info<Object>() ;
        i1.setVar("MLDN") ;
        i2.setVar(new Object()) ;
        fun(i1) ;
        fun(i2) ;
    }

    public static void fun(Info<? super String> temp){
        System.out.println(temp + "、") ;
    }
}


原创粉丝点击