【问题标题】:@SuppressWarnings ArrayList<X> may not contain objects of type Y@SuppressWarnings ArrayList<X> 可能不包含 Y 类型的对象
【发布时间】: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 扩展而来。这也发生在其他地方。

【问题讨论】:

  • 请添加一些示例代码。
  • 另外,哪个工具发出警告?
  • 如果CompressedCardInfoMtgCard 没有共同的基类或接口,并且您希望List 包含两者,那么它必须是List&lt;Object&gt;。实现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


【解决方案1】:

所以我将遵循最佳实践并正确解决这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多