定义和使用含有泛型的接口和泛型通配符

泛型接口基本概念

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

  声明泛型接口:  interface 接口名称<接口标示>{}

interface Info<T>
{
    public T getInfo();  
}

  如果现在一个子类实现此接口是没有进行正确的实现,则在编译时候会出现警告, 例子:

interface Info<T>{        // 在接口上定义泛型
    public T getVar() ;    // 定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info{    // 定义泛型接口的子类
    public T getVar(){
        return null ;
    }
};

以上操作不是一个子类实现泛型最好操作,最好在实现的时候也指定其具体的泛型类型

泛型接口实现的两种方式

  第一方式:定义子类,在子类上也声明泛型类型

复制代码
package Thread1;
interface Info<T>{        // 在接口上定义泛型
    public T getVar() ;    // 定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl<T> implements Info<T>{    // 定义泛型接口的子类
    private T var ;                // 定义属性
    public InfoImpl(T var){        // 通过构造方法设置属性内容
        this.setVar(var) ;    
    }
    public void setVar(T var){
        this.var = var ;
    }
    public T getVar(){
        return this.var ;
    }
};
public class demo1{
    public static void main(String arsg[]){
        Info<String> i = null;        // 声明接口对象
        i = new InfoImpl<String>("李兴华") ;    // 通过子类实例化对象
        System.out.println("内容:" + i.getVar()) ;
    }
};
复制代码

第二方式:如果现在实现接口的子类不想使用泛型声明,则在实现接口的时候直接指定好具体的操作类型即可

复制代码
interface Info<T>{        // 在接口上定义泛型
    public T getVar() ;    // 定义抽象方法,抽象方法的返回值就是泛型类型
}
class InfoImpl implements Info<String>{    // 定义泛型接口的子类
    private String var ;                // 定义属性
    public InfoImpl(String var){        // 通过构造方法设置属性内容
        this.setVar(var) ;    
    }
    public void setVar(String var){
        this.var = var ;
    }
    public String getVar(){
        return this.var ;
    }
};
public class GenericsDemo25{
    public static void main(String arsg[]){
        Info i = null;        // 声明接口对象
        i = new InfoImpl("李兴华") ;    // 通过子类实例化对象
        System.out.println("内容:" + i.getVar()) ;
    }
};

Java泛型通配符


Java语言是面向对象编程语言,在编程过程中对象的引用传递是最常见的。在泛型类的操作中,如果遇到了泛型的引用传递,那么必须要类型匹配才可以传递。那么实在是想让泛型引用传递,该怎么办呢?


我们可以使用通配符 " ? ",表示可以接收此类型的任意泛型对象

Java泛型通配符

列子:

定义一个泛型类

复制代码
public class Point<T> {
    private T key;
    public T getKey() {
        return key;
    }
    public void setKey(T key) {
        this.key = key;
    }
}
复制代码

定一调用的测试类

复制代码
public class TestParadigm {
    public static void main(String[] args) {
        System.out.println("aaa(www.aaa.com)");
        Point<String> paramPoint = new Point<>();
        paramPoint.setKey("欢迎来到aaa");
        printInfo(paramPoint);
        System.out.println("结束");
    }
    private static void printInfo(Point<?> point) {
        System.out.println(point.getKey());
    }
}
复制代码

需要注意的是,我们在定义对象的时候,已经将变量的类型给确定了,这个时候可以对对象里面的属性进行赋值操作,但是如果在定义对象的时候使用通配符,即 Point<?> paramPoint = new Point<>(); 这样的方式,那么在给对象赋值的时候,是不能够给对象里面的参数赋值的,只能设置为 null。

因为 java 语言里面的任何类的对象都可以置为 null

 
复制代码

 

 
posted @   夫君  阅读(244)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示