0

我在问我是否可以将函数作为地图的键。

通常,地图的关键对象应该有hashcodeequal方法。但是JavaFunction是一个方法对象,它没有这两个方法。

Function<String, String> quote1 = s -> "'" + s + "'";
Function<String, String> quote2 = s -> "'" + s + "'";
System.out.println(quote1.equals(quote2));  //false

那么有可能吗?如果可能的话,有样品吗?我没有通过谷歌得到这个案例。

如果没有,有没有其他方法可以识别耗时的Function执行结果?谢谢

4

2 回答 2

0

解决方案是使用带有方法的成熟类hashCodeequals实现:

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
}
于 2019-02-21T03:34:22.500 回答
0

-quote1quote2- 都是由编译器创建的一些 Java 类烘焙的。

这是另一个讨论如何访问字节码

如何从类中获取字节码作为字节数组

虽然,不推荐。

这个问题背后的目标是什么?

于 2019-02-21T03:10:42.423 回答