package org.test4j.hamcrest.iassert.object.impl; import ext.test4j.hamcrest.Matcher; import ext.test4j.hamcrest.core.IsEqual; import org.test4j.hamcrest.iassert.common.impl.ComparableAssert; import org.test4j.hamcrest.iassert.common.intf.IAssert; import org.test4j.hamcrest.iassert.object.intf.INumberAssert; @SuppressWarnings({ "unchecked", "rawtypes" }) public class NumberAssert<T extends Number & Comparable<T>, E extends INumberAssert<T, ?>> extends ComparableAssert<T, E> implements INumberAssert<T, E> { public NumberAssert(Class<? extends IAssert<?, ?>> clazE) { super(clazE); } public NumberAssert(T value, Class<? extends IAssert<?, ?>> clazE) { super(value, clazE); } public NumberAssert(T value, Class<? extends IAssert<?, ?>> clazE, Class valueClazz) { super(value, clazE); this.valueClaz = valueClazz; } /** * 因为IsEqual是基于equal比较值相等的,int和long即使值一样,equal也是不等的<br> * 这里把它们强制转换为同一种类型比较 */ public E isEqualTo(Number expected) { Object _expected = expected; if (expected == null) { return super.isEqualTo((T) expected); } if (this.valueClaz == int.class || this.valueClaz == Integer.class) { _expected = Integer.parseInt(expected.toString()); } if (this.valueClaz == short.class || this.valueClaz == Short.class) { _expected = Short.parseShort(expected.toString()); } if (this.valueClaz == long.class || this.valueClaz == Long.class) { _expected = Long.parseLong(expected.toString()); } if (this.valueClaz == float.class || this.valueClaz == Float.class) { _expected = Float.parseFloat(expected.toString()); } if (this.valueClaz == double.class || this.valueClaz == Double.class) { _expected = Double.parseDouble(expected.toString()); } Matcher<? super T> matcher = IsEqual.equalTo(_expected); return this.assertThat(matcher); } }