gpt4 book ai didi

java - 如何调用泛型类型的get方法?

转载 作者:行者123 更新时间:2023-12-02 09:22:20 28 4
gpt4 key购买 nike

如何告诉编译器我确定该泛型类型具有 get 方法?

我做了一些研究,让 T 扩展一些接口(interface)可能会有所帮助。 example1 example2

  1. 但是我必须为 get 方法扩展的确切接口(interface)是什么?

  2. 如何在IDE中搜索到这个接口(interface)?这样下次就可以避免询问是否是get之外的其他方法了

    private static <T> ArrayList<T> trimstartend(ArrayList<T> rows,Date startdate ,Date endDate){

    // if the date of current row is before the startdate, remove it
    for (Iterator<T> iterator = rows.iterator(); iterator.hasNext();) {
    T row = iterator.next();
    if ((Date)row.get("Date").before(startdate) ) { // this line doesn't compile! Unresolved method get
    iterator.remove();
    }
    }

    // if the date of current row is after the enddate, remove it
    for (Iterator<T> iterator = rows.iterator(); iterator.hasNext();) {
    T row = iterator.next();
    if ((Date)row.get("Date").after(endDate)) { // this line doesn't compile! Unresolved method get
    iterator.remove();
    }
    }

    return rows;
    }

实际上T是hashmap。但让我们在这里将其变得通用。

最佳答案

您有三个选择:

  1. 使用诸如Map之类的接口(interface)其中有 get()方法。然而,这会限制 T成为Map而不是任何带有 get 的东西方法。

  2. 使用具有 get() 的自定义界面方法,但由于 Java 没有 duck typing ,您需要扩展 HashMap所以它将实现自定义接口(interface),这不是很方便,特别是如果你得到 HashMap来自其他地方。

  3. 最后,您可以让用户提供一个函数作为参数。也许像 Function<String, Date> 。对于HashMap ,它只是 get()方法HashMap ,但对于其他数据类型,它可以是其他东西。

    你的函数应该是这样的: private static <T> ArrayList<T> trimstartend(ArrayList<T> rows,Date startdate ,Date endDate, Function<String, Date> dateGetter)

    并获得 Date使用String ,您必须调用dateGetter.apply("Date") .

关于java - 如何调用泛型类型的get方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58606298/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com