Java @SuppressWarningsArrayList<;X>;不能包含Y类型的对象

Java @SuppressWarningsArrayList<;X>;不能包含Y类型的对象,java,arraylist,annotations,warnings,contains,Java,Arraylist,Annotations,Warnings,Contains,我有一个名为CompressedCardInfo的类,它的成员是MtgCard,CompressedCardInfo(或扩展它的类)重载了equals方法,以考虑检查CompressedCardInfo是否等于MtgCard 现在这并不是非常重要,因为它们只是警告(但是它们让我很烦恼),但是当我在ArrayList中有CompressedCardInfo,并调用ArrayList.contains或.indexOf时,我会收到警告,告诉我列表中可能没有MtgCard类型的对象 如何抑制有关此列表

我有一个名为
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);
                }
            }
        }
for(配对卡:decklist){
/*将设置代码转换为TCG名称当然不会保存*/
card.first.setName=CardDbAdapter.getSetNameFromCode(card.first.setCode,数据库);
if(changedCardName==null | | changedCardName.equals(card.first.mName)){
if(mCompressedDecklist.contains(card.first)){
compressededecklistinfo existingCard=mccompressedecklist.get(mccompressedecklist.indexOf(card.first));
if(existingCard.missionboard==卡秒){
mccompressedecklist.get(mccompressedecklist.indexOf(card.first)).add(card.first);
}否则{
mccompressedecklist.add(新的compressedecklistinfo(card.first,card.second));
}
}否则{
mccompressedecklist.add(新的compressedecklistinfo(card.first,card.second));
}
if(MSHOWTALDECKLISTPRICE){
loadPrice(card.first.mName、card.first.setCode、card.first.mNumber);
}
}
}

第5行(contains)、第6行(indexOf)和第8行(indexOf)上的调用。我在那里收到警告,因为ArrayList的类型为
compressedecklistinfo
(这是从
压缩cardinfo
扩展而来的。这种情况在其他地方也会发生。

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

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

请添加一些示例代码。另外,哪个工具发出警告?如果
压缩cardinfo
MtgCard
没有共同的基类或接口,如果希望
List
包含这两个基类或接口,那么它必须是
List
。实现
equals()
,以便
压缩cardinfo.equals(MtgCard)
可以为真是非常不寻常的,我要说的是非常不鼓励,特别是如果
MtgCard.equals(CompressedCardInfo)
也不是真的,因为它违反了:它必须是对称的,即
x.equals(y)
应该返回真的当且仅当
y.equals(x)
返回true。我相信这是Android Studio中的Java linter/Intellij@Andreas它不同时包含这两个元素。
CompressedCardInfo
具有类型为
MtgCard
的成员,并且
.equals(对象)
方法已重载,用于检查
CompressedCardInfo
是否等于
MtgCard
。基本上
CompressedCardInfo
只是表示
MtgCard
的另一种方法。请添加一些示例代码。另外,哪个工具发出警告?if
CompressedCardInfo
MtgCard
没有共同的基类或接口,如果你想让一个
列表包含这两者,那么它必须是一个
列表
。实现
equals()
使得
CompressedCardInfo.equals(MtgCard)
可以是真的,这是非常不寻常的,我要说非常不鼓励,尤其是当
MtgCard.equals(CompressedCardInfo)为真的时候
也不为true,因为它违反了的约定:它必须是对称的,即
x.equals(y)
应在且仅当
y.equals(x)时返回true
返回true。我相信这是Android Studio中的Java linter/Intellij@Andreas它不同时包含这两个元素。
CompressedCardInfo
具有类型为
MtgCard
的成员,并且
.equals(对象)
方法已重载,用于检查
CompressedCardInfo
是否等于
MtgCard
。基本上
CompressedCardInfo
只是表示
MtgCard
的另一种方法。