我真的很想尝试仿制药,但到目前为止,他们造成的麻烦超过了任何好处.拜托,请告诉我,我错了.
我理解在使用无泛型框架(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<T> should be parameterized
isPropertySame = Comparable.class.cast(pOriginal).compareTo(Comparable.class.cast(pUpdated)) == 0;
// The method compareTo(capture#19-of ?) in the type Comparable<capture#19-of ?> 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);
}
}
Run Code Online (Sandbox Code Playgroud)
关于我可以投入的任何想法(帮助)?
好吧,考虑到我无法找到一种“纯粹”的方法来做到这一点,而且我不断遇到极端情况(例如,除了这个之外,处理集合属性的困难),我决定让我的增量生成方法变得更加愚蠢。我意识到我只测试 9 种不同类型的对象,因此我可以只测试我正在比较的 9 个对象中的哪一个,然后转换为该对象并进行特定于对象的测试。
以这种方式实现大约需要一个小时,尽管每次任何对象发生更改时我都必须重新编译,但我认为即使我花了几天时间进行此维护,我仍然处于盈利状态。
所以,最后,我想答案是没有答案。Java 泛型的实现方式不可避免地会偶尔抑制编译器警告并带来运行时类转换异常的风险。
| 归档时间: |
|
| 查看次数: |
9763 次 |
| 最近记录: |