gpt4 book ai didi

java - 替换泛型类型的字段

转载 作者:行者123 更新时间:2023-12-01 19:21:27 24 4
gpt4 key购买 nike

我有通用结构,我需要使用各种通用类型的属性进行搜索。

让我们考虑以下实现:

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/

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