gpt4 book ai didi

java - 我们可以结合两种在类型上有很大差异的方法吗?

转载 作者:IT老高 更新时间:2023-10-28 20:43:52 24 4
gpt4 key购买 nike

我有两个相似但类型不同的 Java 代码块:

private Integer readInteger() {
Integer value = null;
while (value == null) {
if (scanner.hasNextInt()) {
value = scanner.nextInt();
} else {
scanner.next();
}
}

return value;
}

private Double readDouble() {
Double value = null;
while (value == null) {
if (scanner.hasNextDouble()) {
value = scanner.nextDouble();
} else {
scanner.next();
}
}

return value;
}

是否有可能只制作一种对他们都适用的方法?

最佳答案

我会说,使用通用方法,结合 functional interfaces在 Java 8 中引入。

read 方法现在变为 higher order function .

private <T> T read(Predicate<Scanner> hasVal, Function<Scanner, T> nextVal) {
T value = null;
while (value == null) {
if (hasVal.test(scanner)) {
value = nextVal.apply(scanner);
} else {
scanner.next();
}
}

return value;
}

调用代码变为:

read(Scanner::hasNextInt, Scanner::nextInt);
read(Scanner::hasNextDouble, Scanner::nextDouble);
read(Scanner::hasNextFloat, Scanner::nextFloat);
// ...

所以readInteger()方法可以修改如下:

private Integer readInteger() {
return read(Scanner::hasNextInt, Scanner::nextInt);
}

关于java - 我们可以结合两种在类型上有很大差异的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48078009/

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