gpt4 book ai didi

java - 如何在 Java 中缓存具有可变参数 (Varargs) 的函数的结果

转载 作者:行者123 更新时间:2023-12-02 10:04:22 25 4
gpt4 key购买 nike

我有这样的Java方法:

  public <T> T queryDB(Class<T> klass, Object... objects) {
return dbClient.get(klass, objects);
}

如何缓存此调用?它使用可变参数。我不确定如何正确构建缓存键?

最佳答案

如果您根据 klassobject 变量返回一些值,则意味着您有一个由 klassobject 组成的复合键.

您可以做的就是将这些对象封装到一个类中,例如 MyKey:

      public class MyKey <T> {
Class<T> klass;
Object[] objects;

public MyKey(Class<T> klass, Object... objects) {
this.klass = klass;
this.objects = objects;
}

@Override
public boolean equals(Object obj) {
//implement this method comparing klass and objects
}

@Override
public int hashCode() {
//calculate a hash based on klass and objects' hashes
}
}

重写此类的equals()hashCode()方法(强制!),它们根据klass和对象计算其值变量
注意:objects是一个数组,因此必须使用Arrays.equals()方法来比较它。

最后,创建一个 HashMap,其中 MyKey 类作为键,缓存值作为映射的值:

Map<MyKey<T>, T> cache = new HashMap<>();

每次要检查值是否经过哈希处理时,请调用

cache.get(new MyKey(klass, objects));

关于java - 如何在 Java 中缓存具有可变参数 (Varargs) 的函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55411723/

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