object comparable java_java – 转换为Comparable,然后比较

我真的很想尝试仿制药,但到目前为止,他们造成的麻烦超过了任何好处.拜托,请告诉我,我错了.

我理解在使用无泛型框架(Spring,Hibernate)时添加@SuppressWarnings(“unchecked”)的必要性.仅这一点确实降低了泛型的价值,因为需要将类传递给构造函数以避免擦除的缺陷.然而,真正的刺似乎总是在铸造.我通常会尝试一段时间来使语法正确,但随后放弃我对纯度的尝试,添加@SuppressWarnings,继续我的生活.

这是一个例子:我正在反思一个bean来寻找两个实例之间的差异.一些属性实现Comparable,使得(a.equals(b)== false)但是(a.compareTo(b)== 0)(例如BigDecimal,Date).在这些情况下,我希望该属性被认为是相同的.

MyObject original = getOriginal();

MyObject updated = getUpdated();

for (PropertyDescriptor pd : BeanUtils.getPropertyDescriptors(MyObject.class)) {

// Assume I'm putting in the try/catch block

Object pOriginal = pd.getReadMethod().invoke(original, (Object[]) null);

Object pUpdated = pd.getReadMethod().invoke(updated, (Object[]) null);

boolean isPropertySame;

if (Comparable.class.isAssignableFrom(pOriginal.getClass())) {

// Type safety: The method compareTo(Object) belongs to the raw type Comparable. References to generic type Comparable should be parameterized

isPropertySame = Comparable.class.cast(pOriginal).compareTo(Comparable.class.cast(pUpdated)) == 0;

// The method compareTo(capture#19-of ?) in the type Comparable is not applicable for the arguments (capture#21-of ? extends Comparable)

Comparable> comparable = Comparable.class.cast(pOriginal);

isPropertySame = comparable.compareTo(comparable.getClass().getTypeParameters()[0].getGenericDeclaration().cast(pUpdated)) == 0;

// Even if I get the generics right, I still get an error if pOriginal is java.sql.Timestamp and pUpdated is java.util.Date (happens all the time with Hibernate).

isPropertySame = (help);

} else {

isPropertySame = pOriginal.equals(pUpdated);

}

if (!isPropertySame) {

PropertyDelta delta = new PropertyDelta(pd, pOriginal, pUpdated);

dao.save(delta);

}

}

关于我可以投入的任何想法(帮助)?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值