打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
浅谈泛型
userphoto

2022.08.02 广东

关注

泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。

我们先来看个例子:

List list = new ArrayList();

list.add("aikaifa");

list.add(1);

for (int i = 0; i < list.size(); i++) {

System.out.println("result: " + (String) list.get(i));

}

不出意外,程序运行时出错了:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

ArrayList可以存放任意类型,刚才我们添加了一个String类型,接着又添加了一个Integer类型,再使用时都以String的方式使用,结果程序崩溃了。为了能在在编译阶段就发现类似问题,泛型可以避免。

下面我们将第一行声明初始化list的代码稍微改一下,编译器会在编译阶段就能够帮我们发现类似这样的问题。

泛型的使用

  • 泛型类

  • 泛型接口

  • 泛型方法

泛型类

我们先定义一个简单的Book类:

public class Book {

    private String object;

    public void set(String object) { this.object = object; }

    public String get() { return object; }

}

这是最常见的做法,这样做的不足就是Book里面现在只能装入String类型的元素,要是以后我们需要装入Integer等其他类型的元素,还必须要另外重写一个Book,代码得不到复用,使用泛型可以很好的解决这个问题。

public class Book<T> {

    private T t;

    public void set(T t) { this.t = t; }

    public T get() { return t; }

}

这样我们的Book类便可以得到复用,我们可以将T替换成任何我们想要的类型:

Book<Integer> integerBox = new Book<Integer>();

Book<Double> doubleBox = new Book<Double>();

Book<String> stringBox = new Book<String>();

泛型方法

声明一个泛型方法我们只要在返回类型前面加上一个类似<K, V>的形式,例如:

public class Util {

  public static <K, V> boolean compare(Book<K, V> book1, Book<K, V> book2) {

        return book1.getKey().equals(book2.getKey()) &&

         book1.getValue().equals(book2.getValue());

    }

}

public class Book<K, V> {

    private K key;

    private V value;

    public Book(K key, V value) {

        this.key = key;

        this.value = value;

    }

    public void setKey(K key) { this.key = key; }

    public void setValue(V value) { this.value = value; }

    public K getKey()   { return key; }

    public V getValue() { return value; }

}

我们可以像下面这样去调用泛型方法:

Book<Integer, String> book1 = new Book<>(1, "computer");

Book<Integer, String> book2= new Book<>(2, "technology");

 Util.<Integer, String>compare(book1, book2);

篇幅有限,泛型接口、通配符等留在下节

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java 集合
Java8中Map的遍历方式总结
Java泛型
HashMap 排序按照 key 和 value
Map的 entrySet() 详解以及用法(四种遍历map的方式)
有关于Java Map,应该掌握的8个问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服