- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何告诉编译器我确定该泛型类型具有 get 方法?
我做了一些研究,让 T 扩展一些接口(interface)可能会有所帮助。 example1 example2
但是我必须为 get 方法扩展的确切接口(interface)是什么?
如何在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。但让我们在这里将其变得通用。
最佳答案
您有三个选择:
使用诸如Map
之类的接口(interface)其中有 get()
方法。然而,这会限制 T
成为Map
而不是任何带有 get
的东西方法。
使用具有 get()
的自定义界面方法,但由于 Java 没有 duck typing ,您需要扩展 HashMap
所以它将实现自定义接口(interface),这不是很方便,特别是如果你得到 HashMap
来自其他地方。
最后,您可以让用户提供一个函数作为参数。也许像 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/
我是一名优秀的程序员,十分优秀!