栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

3.泛型类型范围限定

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

3.泛型类型范围限定

文章目录
    • 泛型提供通用方法
    • 指定泛型类型的范围,使用extends或super
      • extends继承demo
      • 泛型多继承

泛型提供通用方法
public static  T test(Class clazz) throws InstantiationException, IllegalAccessException {
    System.out.println(clazz.getName());
    return clazz.newInstance();
}
指定泛型类型的范围,使用extends或super
extends: 继承限定T的范围上限
super: 限定T范围下限
限定T要继承User3类或实现User3接口
限定T是User3的超类
限定T要继承UserTest1类或实现UserTest1接口,并且要实现User5接口

的方法
限制效果:T必须继承User3,否则在运行时会报类型转化异常

extends继承demo
@Data
class UserTest1 {
}
public static  void test5(List list) {
    for (T t : list) {
        System.out.println(t);
    }
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    List objects1 = Lists.newArrayList();
    UserTest1 userTest1 = new UserTest1();
    objects1.add(userTest1);
    GenericTopic.test5(objects1);
}

test5泛型方法,并指定泛型的范围是继承User3,但是UserTest1并没有继承User3,在遍历list时,就会报类型转化异常。如下异常

Exception in thread "main" java.lang.ClassCastException: com.enterprise.article.base.generic.UserTest1 cannot be cast to com.enterprise.article.base.generic.User3
	at com.enterprise.article.base.generic.GenericTopic.test5(GenericTopic.java:70)
	at com.enterprise.article.base.generic.UseGeneric.main(GenericTopic.java:164)
泛型多继承

的用法

限制效果:

  1. T必须继承UserTest1,否则在运行时会报类型转化异常
  2. 在执行User5接口中存在的方法时,T必须实现User5定义的该方法,否则在运行时会报类型转化异常
public static  T test6(List list) {
    for (T t : list) {
        t.user5Method();
        t.user1Method();
    }
    return list.get(0);
}
@Data
class UserTest1 {
}
interface User5 {
    Long user5Id = 123L;
    Long userId = null;

    void user5Method();
}
@Data
class UserTest2 extends UserTest1 {
    public void user5Method() {
        System.out.println("UserTest2 a方法");
    }
}

Test:

public static void main(String[] args) throws InstantiationException, IllegalAccessException {
    List objects1 = Lists.newArrayList();
    UserTest2 userTest2 = new UserTest2();
    objects1.add(userTest2);
    GenericTopic.test6(objects1);
}

在UserTest2不实现User5接口的情况下,执行t.user5Method()会报如下异常。

Exception in thread "main" java.lang.ClassCastException: com.enterprise.article.base.generic.UserTest2 cannot be cast to com.enterprise.article.base.generic.User5

原因是在执行User5接口中存在的方法时,如user5Method方法,T类必须实现并覆盖User5的该方法。才能执行该方法。

以下场景能够运行成功:

  1. 该方法没有在User5接口中定义,并且该方法是UserTest1的方法。
  2. 不执行User5中的方法,相当于,去除了实现User5的限制
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270511.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号