java中类对象之间的强制转换
我有两门课java中类对象之间的强制转换,java,casting,floating-point,double,Java,Casting,Floating Point,Double,我有两门课Float2&&Double2 public final class Float2 { public float width; public float height; public Float2 multiplyBy(float number) { return new Float2(this.width * number, this.height * number); } } 我想将multiplyBy方法的结果强制转换为Double2,这样最终
Float2
&&Double2
public final class Float2 {
public float width;
public float height;
public Float2 multiplyBy(float number) {
return new Float2(this.width * number, this.height * number);
}
}
我想将multiplyBy方法的结果强制转换为Double2,这样最终我就不会有
Float2 newRectangleSize=rectangleSize.multiplyBy(3.2f)
但将2个新矩形大小
作为乘法的结果。当然,我可以分别强制转换宽度和高度值,但我想知道java中是否有更高级的解决方案?因此,在这种情况下尝试强制转换显然会导致ClassCastException
。一个选项是支持由两个类实现的接口,该接口允许将width()和height()定义为Number对象,甚至是扩展Number的类型。然后可以逐个实现地处理转换,以处理int或short等情况下的精度损失
接口大小{
T宽度();
T高度();
}
另一种选择可能是为这些类提供静态工厂方法,以允许将Double2转换为Float2,反之亦然。它可能看起来像这样
公共类2{
私人最终双宽度;
私人最终双高;
公共双通道2(双宽双高){
这个。宽度=宽度;
高度=高度;
}
公共静态Double2值(浮动2浮动){
返回新的Double2((双)float.width,(双)float.height);
}
}
Float2 Float2=新的Float2(2f,2f)。乘以(2f);
Double2 Double2=Double2.valueOf(float2);
如果Double2
和Float2
是相关类型,则可以进行铸造
只要它们不是,就不能强制转换它们,无论参数的名称是否相同(包括其类型)。但是,您可以将此优势用于基于反射的框架,从而简化类型之间的映射,例如:
如果您不喜欢使用框架(如果只有少数特定和简单的情况),我将提供两种基于纯OOP的基本方法:
Float2
的Double2
构造函数(假设字段保持public
):
Float2
中返回此类类型的方法:
public Double2 asDouble2() {
return new Double2(this.width, this.height);
}
Double2 newRectangleSize=(Double2)rectangleSize.multiplyBy(3.2f)如果Float2
可以转换为Double2
,则code>将起作用。
@Mapper
public interface Double2Mapper {
Double2Mapper INSTANCE = Mappers.getMapper(Double2Mapper.class);
@Mapping
Double2 floatToDouble(Float2 float2);
}
Double2 double2 = Double2Mapper.INSTANCE.floatToDouble(rectangleSize.multiplyBy(3.2f));
public Double2(Float2 float2) {
this.width = float2.width;
this.height = float2.height;
}
public Double2 asDouble2() {
return new Double2(this.width, this.height);
}