Если вы возвращаете какое-то значение, основанное на ваших klass
и object
переменных, это означает, что у вас есть составной ключ klass
и object
.
Что вы можете сделать, это заключить эти объекты в класс, скажем, 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
и объектов variables
.
Примечание : objects
- это массив, поэтому для его сравнения необходимо использовать метод Arrays.equals()
.
И, наконец, создайте HashMap
с вашим классом MyKey
в качестве ключа и кэшированным значением в качестве значения карты:
Map<MyKey<T>, T> cache = new HashMap<>();
Каждый раз, когда вы хотите проверить, хэшировано ли значение, звоните
cache.get(new MyKey(klass, objects));