【发布时间】:2017-11-10 05:48:03
【问题描述】:
我有一个名为CompressedCardInfo 的类,它有一个MtgCard 作为它的成员,并且CompressedCardInfo(或扩展它的类)重载了equals 方法以考虑检查CompressedCardInfo等于MtgCard。
现在这并不是非常重要,因为它们只是警告(但是它们困扰着我),但是当我在 ArrayList 中有 CompressedCardInfo 并调用 ArrayList.contains 或 .indexOf 时,我收到警告告诉我列表中可能没有 MtgCard 类型的对象。
如何禁止显示有关此列表的特定警告?或者有没有更好的方法来处理这种比较?
谢谢。
for (Pair<MtgCard, Boolean> card : decklist) {
/* Translate the set code to TCG name of course it's not saved */
card.first.setName = CardDbAdapter.getSetNameFromCode(card.first.setCode, database);
if (changedCardName == null || changedCardName.equals(card.first.mName)) {
if (mCompressedDecklist.contains(card.first)) {
CompressedDecklistInfo existingCard = mCompressedDecklist.get(mCompressedDecklist.indexOf(card.first));
if (existingCard.mIsSideboard == card.second) {
mCompressedDecklist.get(mCompressedDecklist.indexOf(card.first)).add(card.first);
} else {
mCompressedDecklist.add(new CompressedDecklistInfo(card.first, card.second));
}
} else {
mCompressedDecklist.add(new CompressedDecklistInfo(card.first, card.second));
}
if (mShowTotalDecklistPrice) {
loadPrice(card.first.mName, card.first.setCode, card.first.mNumber);
}
}
}
第 5 行 (contains)、6 (indexOf) 和 8 (indexOf) 上的调用。我在那里收到警告,因为 ArrayList 的类型为 CompressedDecklistInfo(从 CompressedCardInfo 扩展而来。这也发生在其他地方。
【问题讨论】:
-
请添加一些示例代码。
-
另外,哪个工具发出警告?
-
如果
CompressedCardInfo和MtgCard没有共同的基类或接口,并且您希望List包含两者,那么它必须是List<Object>。实现equals()使得CompressedCardInfo.equals(MtgCard)可以为真是非常不寻常的,我会说非常不鼓励,特别是如果MtgCard.equals(CompressedCardInfo)也不是真的,因为它违反了equals()的合同:它必须是 对称的,即x.equals(y)应该返回true当且仅当y.equals(x)返回true。 -
我相信它是 Android Studio/Intellij 中的 Java linter
-
@Andreas 它不包含这两个。
CompressedCardInfo有一个类型为MtgCard的成员,并且.equals(Object)方法已被重载以检查CompressedCardInfo是否等于MtgCard。基本上CompressedCardInfo只是表示MtgCard的另一种方式。
标签: java arraylist annotations warnings contains