![]() |
1
2
看起来您需要某种中间策略对象,它提取一个值,比较一个值,或者提供一个哈希代码或比较函数。 比如:
或方法,如:
使用与当前Java语法有点冗长(可以为JDK 8更改)。 你最终会得到这样的结果:
或:
在JDK8中,可能类似于:
或:
或:
或:
|
![]() |
2
2
通过添加类参数,可以使搜索的签名包含类型参数。例如:
然后客户端必须使用
必须包括课程可能看起来有点难看,但当你真正思考问题时——客户不总是知道它在搜索什么吗?难道后面的代码
如果您的ID类型不一致,可以将签名更改为
|
![]() |
3
0
我建议您使用类似的接口。 person p=structure.searchunique(new fieldfilter(“id”,12));//搜索id为12的人 person[]p=structure.searchall(new fieldfilter(“name”,“john”));//搜索名为john的人 此外,我们可以实现允许搜索目标类的所有可用字段的过滤器: person[]p=structure.searchall(new fieldfilter(“john”));//搜索所有john 如何实现这一点?这里有一些提示。 首先,“结构”是什么?它是一个封装集合,将来可能包含一些索引功能。此类应具有类似 结构(收集数据); 它的搜索方法迭代给定的集合并调用FieldFilter的compateto()方法,该方法实现可比较的: 用于(元素:集合){ if(filter.compareto(elem))。{ 结果.添加(elem); } } 返回结果; FieldFilter应该如下所示: 公共类FieldFilter实现可比较的{ 私有字符串字段名; 私有V字段值; 公共字段筛选器(字符串fieldname,v fieldvalue){ this.fieldname=fieldname; this.fieldValue=字段值; } 公共布尔比较{ field field=elem.getClass().getField(字段名); field.setaccessible(真); 返回field.getValue()。等于(fieldValue); } } 请注意,该代码是直接以应答形式编写的,从未编译过,因此不能按原样使用。但我希望它能描述这个想法。 |
![]() |
4
0
如果要通过正在搜索的类型与传递给search()方法的参数类型之间的泛型强制执行映射,则必须在某个地方指定此映射。我认为如果没有客户端类的通用标记接口,就没有任何方法可以做到这一点。 例如,这样的方法是可行的:
所以现在编译器将允许:
但不是:
如果连标记接口都不是一个选项,恐怕您最好希望使用基于参数类型的特定搜索方法,例如:
但这当然意味着无效的案例,比如
不会在编译时捕获,而是需要在运行时检查。 |
|
user29759326 · 如何返回递归函数中的最后一个值? 3 月前 |
|
malife89 · 将java中的字符串读取为正确的日期格式 3 月前 |
![]() |
Tim · 在java中,有没有更快的方法将字节数组写入文件? 3 月前 |
![]() |
rudraraj · java中未声明最终变量 4 月前 |
![]() |
Bala Ji · 以下BFS的实施效率如何? 4 月前 |