gpt4 book ai didi

java - Java 8中String和Integer的父类(super class)

转载 作者:行者123 更新时间:2023-12-01 07:48:46 24 4
gpt4 key购买 nike

我正在编写一个简单的谓词函数,如下所示:

public static Predicate<String> stringPredicate(String op, String compVal) {
if (op.equals("=")){
return p -> p.compareTo(compVal) == 0;
}
else if (op.equals("<")){
return p -> p.compareTo(compVal) == -1;
}
else if (op.equals("<=")){
return p -> p.compareTo(compVal) == 0 || p.compareTo(compVal) == -1;
}
else if (op.equals(">")){
return p -> p.compareTo(compVal) == 1;
}
else if (op.equals(">=")){
return p -> p.compareTo(compVal) == 1 || p.compareTo(compVal) == 0;
}
return p -> -1 == 0; //return false
}

我希望这个函数适用于整数、 float 和字符串。因此,我不想编写 2 个相同的谓词函数(一个用于字符串,一个用于整数 + float ),而是想编写一个,因为compareTo() 方法适用于所有 3 个谓词函数。我想我可以通过更换来做到这一点 Predicate<String>Predicate<Super class of Integer/Float/String> 。我试过Object但这没有用。那么,我应该用什么来代替 <String>以我想要的方式使用该功能?

最佳答案

Integer 没有共同的“父类(super class)”和String除了 Object ,这对你来说没有用,因为它没有 compareTo .

但是两者之间有一个共同的接口(interface) - Comparable<T> ,它提供 compareTo方法。

public static <T extends Comparable<T>> Predicate<T> predicate(String op, T compVal) {
switch (op) {
case "=": return p -> p.compareTo(compVal) == 0;
case "<": return p -> p.compareTo(compVal) < 0;
case "<=": return p -> p.compareTo(compVal) <= 0;
case ">": return p -> p.compareTo(compVal) > 0;
case ">=": return p -> p.compareTo(compVal) >= 0;
default: return p -> false;
}
}

(从 Java 7 开始,您可以 switch on strings ,因此这里使用 if/else 链是没有意义的。但在您的情况下 an enum for op may even be more suitable 。)

关于java - Java 8中String和Integer的父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476083/

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