假设下一个场景:
interface FloatObject<V> extends Function<Float, V> {
V apply(Float floatObject);
default FloatObject<Float, V> x_5() {
return aFloatObject -> apply(aFloatObject * 5);
}
}
家长:
class FloatPrimitive<V> implements FloatObject<V> {
V apply(float floatPrimitive);
@Override
default V apply(Float aFloat) {
return apply((float) aFloat);
}
@Override
default FloatPrimitive<V> x_5() {
return floatPrim -> apply(floatPrim * 5); //This will use the primitive version.
}
}
或者...
@Override
@SuppressWarnings("unchecked")
default FloatPrimitive<V> x_5() {
return (FloatPrimitive<V>) super.x_5(); //What will this do?
}
当抑制版本在
apply(float floatPrimitive)
实例化上执行 x_5()
时...接受的值(浮点基元)是否会转换为 Float 对象,然后再次转换为浮点基元?或者它会跳过对象并直接将整个对象作为原语执行?
我的猜测是,该转换是一个粗略的转换...这意味着基元将被转换为一个对象,然后该对象将乘以 5,然后返回的对象将再次转换为基元。
除非... javac 正在做一个非常好的推理...我不知道...
地球是平的。 1+1就是11。我愿意当众羞辱自己。