java泛型,泛型的高级用法详解

KLQ 2020-08-27 13:47:00 java常见问答 8119

下面的文章要给大家介绍的就是java泛型的高级用法方面的内容,主要介绍了三个方面,限制泛型可用类型、使用类型通配符、继承泛型类和实现泛型接口等,一起通过下面的文章来了解一下吧。

1、限制泛型可用类型

在java当中,默认可以使用任何类型来实例化一个泛型类对象,当然了,也可以对泛型类实例的类型进行限制。

语法格式:

class 类名称<T extends anyClass>

在这当中,anyClass指某个接口或类,使用泛型限制之后,泛型类的类型必须实现或者是继承anyClass这个接口或类。

不管anyClass是接口还是类,在进行泛型限制时都必须使用extends关键字。

示例:

在下面的示例代码中创建了一个ListClas类,并对该类的类型限制为只能是实现List接口的类。

定义ListClass类的时候,设置泛型类型必须实现List接口。

// 限制ListClass的泛型类型必须实现List接口
public class ListClass < T extends List >
{
    public static void main(String[] args)
    {
        // 实例化使用ArrayList的泛型类ListClass,正确
        ListClass < ArrayList > lc1 = new ListClass < ArrayList > ();
        // 实例化使用LinkedList的泛型类LlstClass,正确
        ListClass < LinkedList > lc2 = new ListClass < LinkedList > ();
        // 实例化使用HashMap的泛型类ListClass,错误,因为HasMap没有实现List接口
        // ListClass<HashMap> lc3=new ListClass<HashMap>();
    }
}

例:

ArrayListLinkedList都实现了List接口,所以可以实例化ListClass类。

HashMap没有实现List接口,所以在实例化ListClass类的时候,就会报错。

在没有使用extends关键字限制泛型类型的时候,其实,是默认使用Object类作为泛型类型。

所以的话,Object类下的所有子类都可以实例化泛型类对象。

如下所示:

两个等价的泛型类

2、使用类型通配符

Java中的泛型还支持使用类型通配符,它的作用是在创建一个泛型类对象时限制这个泛型类的类型必须实现或继承某个接口或类。

使用泛型类型通配符的语法格式:

泛型类名称<? extends List>a = null;

在这当中,“<? extends List>”作为一个整体表示类型未知,在需要使用泛型对象的时候,可以单独实例化。

例:(下面的示例代码演示了类型通配符的使用)

A<? extends List>a = null;
a = new A<ArrayList> ();    // 正确
b = new A<LinkedList> ();    // 正确
c = new A<HashMap> ();    // 错误

在上面的代码当中,同样的因为HashMap类没有实现List接口,所以在编译的时候会报错。

3、继承泛型类和实现泛型接口

定义为泛型的类和接口也可以被继承和实现。

例:下面的示例代码演示了怎样继承泛型类。

public class FatherClass<T1>{}
public class SonClass<T1,T2,T3> extents FatherClass<T1>{}

假如,要在SonClass类继承FatherClass类时保留父类的泛型类型,需要在继承时指定,否则的话直接使用extends FatherClass语句进行继承操作,这个时候,T1、T2 和 T3都会自动变成Object,所以一般情况下都将父类的泛型类型保留。

下面的示例代码演示了怎样在泛型中实现接口。

interface interface1<T1>{}
interface SubClass<T1,T2,T3> implements
Interface1<T2>{}

以上的内容你都清楚了吗?更多相关常见问题,请继续关注奇Q工具网来进行了解吧。

推荐阅读:

java泛型,泛型方法详解

java泛型,泛型类详解

java泛型,泛型集合详解