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
的另一种方法。请添加一些示例代码。另外,哪个工具发出警告?ifCompressedCardInfo
和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
的另一种方法。