当前位置: 首页 > news >正文

怎么自己开网站福州网站建设资讯

怎么自己开网站,福州网站建设资讯,甘州区建设局网站,云服务器wordpress泛型类型通配符限定 &#x1f686;PECS | 类型通配符限定如何使用“<? extends T>”和“<? super T>”通配符java源码示例PECS | 类型通配符限定 PECS原则是指在使用泛型时&#xff0c;当我们需要传递一个泛型集合时&#xff0c;如何选择适当的泛型类型通配符来…

泛型类型通配符限定 🚆

    • PECS | 类型通配符限定
    • 如何使用“<? extends T>”和“<? super T>”通配符
    • java源码示例

PECS | 类型通配符限定

PECS原则是指在使用泛型时,当我们需要传递一个泛型集合时,如何选择适当的泛型类型通配符来限制集合中元素的类型。

这个原则有两个部分:

第一部分:“Producer Extends”,表示如果一个集合中的元素将被频繁读取而不是修改,那么我们应该使用限定类型通配符“<? extends T>”。这是因为如果我们使用非限定的类型参数 T,我们只能够保证集合中的元素是 T 类型,而不能保证它们的子类类型。但如果我们使用“<? extends T>”,我们可以确保集合中的元素类型是 T 或其子类,因此我们可以安全地从集合中读取元素并使用它们。

第二部分:“Consumer Super”,表示如果一个集合中的元素将被经常插入而不是读取,那么我们应该使用“<? super T>”通配符。这是因为使用非限定类型参数 T 时,我们只能保证集合中的元素类型是 T 或其父类类型,而不能保证它们是 T 类型或其子类类型。但如果我们使用“<? super T>”,我们可以安全地将类型为 T 或其子类类型的元素插入到集合中,因为这些元素都是 T 类型或其父类类型。

因此,PECS原则帮助我们选择适当的泛型类型通配符,以确保我们在使用泛型时能够正确地读取或修改集合中的元素,从而增强代码的可读性和可维护性。

如何使用“<? extends T>”和“<? super T>”通配符

假设我们有一个 Animal 类型和它的两个子类 Dog 和 Cat:

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

现在我们有一个方法,接受一个 Animal 类型的集合,并返回其中最后一个元素。我们可以这样实现该方法:

public static <T> T getLast(List<T> list) {if (list.isEmpty()) {return null;} else {return list.get(list.size() - 1);}
}

这个方法可以接受一个 Animal 类型的集合,但我们也可以使用限定类型通配符“<? extends T>”,来表示集合中的元素类型是 T 或其子类类型。这样我们就可以调用这个方法来获取一个元素类型为 Dog 或 Cat 的集合的最后一个元素:

List<Dog> dogs = Arrays.asList(new Dog(), new Dog());
Dog lastDog = getLast(dogs);List<Cat> cats = Arrays.asList(new Cat(), new Cat());
Cat lastCat = getLast(cats);

这里使用“<? extends T>”通配符,允许我们将 List 和 List 都传递给 getLast 方法,因为它们都是 Animal 类型的子类。

另一个示例是,假设我们有一个方法,接受一个 Animal 类型的集合和一个 Animal 类型的元素,将元素插入集合的最前面:

public static void insertFirst(List<? super Animal> list, Animal animal) {list.add(0, animal);
}

这个方法使用“<? super T>”通配符,表示集合中的元素类型是 T 或其父类类型。这样我们就可以调用这个方法来将一个类型为 Dog 或 Cat 的元素插入到一个类型为 Animal 的集合中:

List<Animal> animals = new ArrayList<>();
Dog dog = new Dog();
insertFirst(animals, dog);Cat cat = new Cat();
insertFirst(animals, cat);

这里使用“<? super Animal>”通配符,允许我们将 Animal、Dog、Cat 都插入到类型为 Animal 的集合中,因为它们都是 Animal 类型或其子类类型。

java源码示例

有一些 Java 标准库中的方法使用了“<? extends T>”和“<? super T>”通配符同时出现。一个经典的例子是 Collections.copy 方法,它将一个集合的内容复制到另一个集合中:

public static <T> void copy(List<? super T> dest, List<? extends T> src) {int srcSize = src.size();if (srcSize > dest.size()) {throw new IndexOutOfBoundsException("Source does not fit in dest");}for (int i = 0; i < srcSize; i++) {dest.set(i, src.get(i));}
}

在这个方法中,我们同时使用了“<? super T>”和“<? extends T>”通配符,因为我们需要同时支持将元素类型为 T 或其子类类型的源集合复制到元素类型为 T 或其父类类型的目标集合中。

通过使用“<? extends T>”通配符来限制源集合的元素类型,我们可以确保源集合中的元素类型是 T 或其子类类型。通过使用“<? super T>”通配符来限制目标集合的元素类型,我们可以确保目标集合中的元素类型是 T 或其父类类型。这样,即使源集合的元素类型是目标集合元素类型的子类,我们也可以安全地将源集合中的元素复制到目标集合中。

以下是使用 Collections.copy 方法的示例代码:


List<Animal> animals = new ArrayList<>(Arrays.asList(new Animal(), new Animal()));
List<Dog> dogs = Arrays.asList(new Dog(), new Dog());
Collections.copy(animals, dogs);

在这个示例中,我们将一个元素类型为 Dog 的集合复制到一个元素类型为 Animal 的集合中。由于我们在 copy 方法中使用了“<? super T>”和“<? extends T>”通配符,所以我们可以正确地将元素类型为 Dog 的集合复制到元素类型为 Animal 的集合中。

http://www.yayakq.cn/news/349592/

相关文章:

  • 免费php企业网站管理系统怎样在wordpress里添加菜单
  • 网站开发准备工作pc网站自动跳转wap
  • 网站换主机计算机软件著作权
  • 上海专业网站建设费国外免费服务器地址
  • 网站建设管理与维护ppt怎么登录微信小程序平台
  • 单页面网站模板怎么做中山网站免费制作
  • 学校网站首页设计phpcms中的网站介绍页
  • 网站建设策划文案网站建设 检查 通报
  • 红酒网站模板看想看的做想做的电影网站
  • 洛阳网站开发互联网公司排名2018
  • lol小米和谁做的视频网站响应 网站建设
  • 宜春市城乡规划建设局网站做网站的竞品分析
  • 免费做片头的网站邯郸做企业网站改版
  • 绿色企业网站模板wordpress微博登陆插件
  • 装饰行业模板网站龙岩网红街
  • 如何不花钱开发网站网站怎么做留言提交功能
  • 西安道桥建设有限公司网站厦门市建设局思明建设分局官方网站
  • 网站建设教程搭建浊贝湖南岚鸿给力专门做照片书的网站
  • 宁波中科网站建设有限公司网络营销公司哪家好
  • 上海大规模网站建设平台汉服网页设计素材
  • 快速做网站企业通用网站模板
  • 珠海营销营网站建设公司安卓软件是哪个公司开发的
  • 微信分销网站建设多少钱莱芜杂谈 莱芜话题
  • 南京需要做网站的公司网站开发工程师asp考试
  • 设计网站要包含信息类型网站开发语言对比
  • 东莞微信网站建设动态酒店类网站开发的策略
  • 中国风html5网站模板免费下载朝阳开发公司
  • o基础学建网站网站制作怎样做背景
  • 开发网站实训的心得体会手机短视频制作软件app
  • 网站如何做服务器授权书江苏省建设考试网站准考证打印