作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
<分区>
当下面的代码运行时:
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。
我是一名优秀的程序员,十分优秀!