作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有通用结构,我需要使用各种通用类型的属性进行搜索。
让我们考虑以下实现:
public class Person {
private int id;
private String name;
// + getters & setters
}
现在我有了自定义数据结构,其中一种方法如下:
public T search(T data) { ... }
这当然是无稽之谈。我真正需要的代码是这样的:
Person p = structure.search(12); // person's id
或
Person p = structure.search("Chuck N."); // person's name
所以在pseudoJava (:))中,代码将是这样的:
public T search(T.field key)
这当然是不可能的:(但是如何处理这种情况?关键是:我不想强制客户端的类(如 Person)实现我自己的接口(interface)或扩展我自己的接口(interface)类。有什么解决方法吗?
最佳答案
看起来您想要某种中间策略对象,它提取一个值,比较一个值,也许提供一个哈希码或一个比较函数。
类似于:
interface Matcher<T> {
boolean matches(T obj);
}
或方法,例如:
boolean matches(T obj, V value);
V get(T obj);
int hash(T obj);
int compare(T a, T b);
当前 Java 语法的使用有些冗长(对于 JDK 8 可能会有所改变)。
你最终会得到这样的结果:
Person p = structure.search(
new Matcher<Person>() { public boolean matches(Person person) {
return person.getID() == 12;
})
);
或者:
Person p = structure.search(
new Matcher<Person,Integer>() {
public boolean matches(Person person, Integer id) {
return person.getID() == id;
}
),
12
);
在 JDK8 中,也许是这样的:
Person p = structure.search(
{ Person person -> person.getID() == 12 }
);
或者:
Person p = structure.search(
{ Person person, Integer id -> person.getID() == id },
12
);
或者:
Person p = structure.search(
{ Person person -> person.getID() },
12
);
或者:
Person p = structure.search(
Person#getID, 12
);
关于java - 替换泛型类型的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023694/
我是一名优秀的程序员,十分优秀!