gpt4 book ai didi

具有泛型的 Java lambda 类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:31 26 4
gpt4 key购买 nike

<分区>

当下面的代码运行时:

import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;

class A {
private static final List<Adapter<? extends Number>> adapters = Arrays.asList(
Integer::valueOf,
s -> Long.valueOf(s),
(Adapter<Float>) s -> Float.valueOf(s),
new Adapter<Double>() {
@Override
public Double adapt(String s) {
return Double.valueOf(s);
}
}
);

private interface Adapter<T> {
T adapt(String s);

default Type type() {
try {
return getClass().getMethod("adapt", String.class).getReturnType();
} catch (NoSuchMethodException e) {
throw new AssertionError(e);
}
}
}

public static void main(String[] args) {
for (Adapter<?> adapter : adapters) {
System.out.printf("Got adapter for type %s%n",
adapter.type().getTypeName());
}
}
}

我得到:

% javac A.java
% java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
% java A
Got adapter for type java.lang.Object
Got adapter for type java.lang.Object
Got adapter for type java.lang.Object
Got adapter for type java.lang.Double

我很好奇为什么只有最后一个适配器被识别为 Double,其余的都是 Object(与 Integer、Long 和 Float 相反)。至少,我原以为它们会用于 Number。

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