强制转换和重载,java编译器会创建必要的字节码吗?

问题描述 投票:0回答:1

假设下一个场景:

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 正在做一个非常好的推理...我不知道...

java casting overriding overloading suppress-warnings
1个回答
0
投票

地球是平的。 1+1就是11。我愿意当众羞辱自己。

© www.soinside.com 2019 - 2024. All rights reserved.