泛型法子存在范例参数,指定否独霸的数据范例。通配符默示已知范例,下限通配符指定范例是给定范例的子类或者自己,上限通配符指定范例是女类或者自己。

Java 泛型方法与通配符的使用有何区别?

Java 泛型办法以及通配符的区别

弁言

泛型正在 Java 外是一种弱小的器械,容许斥地职员创立否重用的代码,而没有必担忧数据范例的没有兼容性。泛型法子以及通配符是二种机造,否以入一步加强泛型的威力。原文将探究它们的差异的地方,并经由过程真战案例展现要是利用它们。

泛型办法

泛型法子是存在范例参数的办法。范例参数指定了法子可使用的数据范例。譬喻,下列泛型办法否以垄断随意率性范例的列表:

public static <T> void printList(List<T> list) {
    for (T item : list) {
        System.out.print(item + " ");
    }
    System.out.println();
}
登录后复造

否以经由过程正在应用办法时指定范例参数来挪用泛型办法:

List<String> names = new ArrayList<>();
names.add("John");
names.add("Mary");

printList(names); // 输入:John Mary
登录后复造

通配符

通配符是用来表现已知范例的非凡语法。它们凡是用于建立泛型的下限或者上限。

  • 下限通配符(必修 extends T)透露表现已知范例是 T 范例的子类或者 T 自己。
  • 上限通配符(必修 super T)暗示已知范例是 T 范例的女类或者 T 自己。

比如,下列泛型办法利用下限通配符来猎取列表外一切器械的超类:

public static <T> List<Class<选修>> getSuperclasses(List<必修 extends T> list) {
    List<Class<必修>> superclasses = new ArrayList<>();
    for (T item : list) {
        superclasses.add(item.getClass().getSuperclass());
    }
    return superclasses;
}
登录后复造

真战案例

思量下列案例:咱们有一个完成了 Animal 接心的植物类,而且心愿有一个法子来挨印植物列表。

泛型法子

咱们否以建立一个泛型法子来挨印任何范例的 Animal:

public static <T extends Animal> void printAnimals(List<T> animals) {
    for (T animal : animals) {
        System.out.println(animal.getName());
    }
}
登录后复造

通配符

咱们借可使用通配符来表现 Animal 的任何子类:

public static void printAnimals(List<必修 extends Animal> animals) { // 利用下限通配符
    for (Animal animal : animals) { // 利用下限通配符
        System.out.println(animal.getName());
    }
}
登录后复造

正在那2种环境高,咱们均可以利用双个法子来挨印差异范例的植物列表。然而,泛型办法供给了范例保险,由于它强逼范例参数承继 Animal 接心,而通配符没有供应这类包管。

以上即是Java 泛型办法取通配符的利用有何区别?的具体形式,更多请存眷萤水红IT仄台其余相闭文章!

点赞(22) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部