我问我是否可以将一个函数作为地图的关键。
通常,地图的关键对象应该有hashcode
和equal
方法。但是,Java Function
是一个方法对象,它没有这两种方法。
Function<String, String> quote1 = s -> "'" + s + "'";
Function<String, String> quote2 = s -> "'" + s + "'";
System.out.println(quote1.equals(quote2)); //false
有可能吗?如果可能,任何样品?谷歌没有得到这个案子。
如果没有,有没有其他方法来识别耗时的Function
执行结果?谢谢
-quote1
和quote2
都是由编译器创建的一些Java类烘焙的。
这是另一个讨论如何访问字节码的讨论
How to get bytecode as byte array from Class
虽然,不推荐。
这个问题背后的目标是什么?
解决方案是使用实现hashCode
和equals
方法的完整类:
public class StringStringFunction implements Function<String, String> {
static String id = "'+s+'";
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object obj) {
return obj instanceof StringStringFunction;
}
@Override
public String apply(String s) {
return "'" + s + "'";
}
}
然后我们可以写:
public static void main(String[] a) {
Function<String, String> quote1 = new StringStringFunction();
Function<String, String> quote2 = new StringStringFunction();
System.out.println(quote1.equals(quote2)); //true
}