我面临一个类转换异常,从java.lang.Double到java.lang.Integer



我正在为一个方法编写一个 JUnit 测试用例,该方法具有返回一个 Object 的getValue()方法,getValue()返回我在setValue()内部传递的值,在这种情况下,当我将双精度值传递给setValue()时,它会给出类转换异常。我无法弄清楚如何解决这个问题。

这是我正在测试的 if 条件,

Public class ImageToolsMemento 
{
public static final int FREEROTATION=3;
private double _freeRotation;
public void combine(ImageToolsMemento obj) //test method
{
if(((Integer)(obj.getValue(FREEROTATION))).intValue() != 0)//line 224
_freeRotation = ((Integer)(obj.getValue(FREEROTATION))).intValue();
}
public Object getValue(int type)
{
Object ret;
switch(type)
{
case FREEROTATION:
default:
ret = null;
}
return ret;
}
public void setValue(double value, int type)
{
switch(type)
{
case FREEROTATION:
_windowPanelMemento.setValue(value, type);
break;
default:
//"default case"
break;
}
}
}

测试用例

public class ImageToolsMementoTest 
{
@InjectMocks
ImageToolsMemento imageToolsMemento;
@Before
public void setUp() throws Exception 
{
imageToolsMemento=new ImageToolsMemento();
}
@Test
public void testCombine() 
{
imageToolsMemento.setValue(1.3, ImageToolsMemento.FREEROTATION);
imageToolsMemento.combine(imageToolsMemento);//calling test method, line 553
double _freeRotation=Whitebox.getInternalState(imageToolsMemento, "_freeRotation");
assertEquals(1.3,_freeRotation,0.0);
}
}

堆栈跟踪

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer
at com.toolboxmemento.ImageToolsMemento.combine(ImageToolsMemento.java:224)
at com.toolboxmemento.test1.ImageToolsMementoTest.testCombine(ImageToolsMementoTest.java:553)

任何人都可以帮我解决这个问题吗 附言我无法更改实现

在 java 中,您不能将java.lang.Double转换为java.lang.Integer。您的错误在线:

if(((Integer)(obj.getValue(FREEROTATION))).intValue() != 0)//line 224

您可以使用DoubleintValue方法代替强制转换:

if(((Double)obj.getValue(FREEROTATION)).intValue() != 0)//line 224

您需要执行显式类型转换,因为 double 不会隐式存储在 int 类型中。您可以通过以下方式执行此操作: int i = (int) d;

相关内容

  • 没有找到相关文章

最新更新