Хешкод

1,137
5
2
Можанги, по их обычаям, написали костыль. На этот раз в ItemStack. Там не реализован ни equals, ни hashCode. Зато есть статический метод areItemStackEquals. И что делать? Я сделал промежуточный класс, но боюсь, что будут коллизии.
Код:
@Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj instanceof ItemStackWithEquals) {
            return ItemStack.areItemStacksEqual(((ItemStackWithEquals) obj).getStack(), stack);
        } else {
            return super.equals(obj);
        }
    }

    @Override
    public int hashCode() {
        Item item = stack.getItem();
        NBTTagCompound tagCompound = stack.getTagCompound();
        int stackSize = stack.stackSize;
        int hashCode = 0;
        hashCode += stackSize;
        if (item != null) {
            hashCode += item.hashCode();
            if (tagCompound != null) {
                hashCode += tagCompound.hashCode();
            }
            return hashCode;
        } else {
            return super.hashCode();
        }
    }

 

tox1cozZ

aka Agravaine
Модератор
7,753
512
2,469
"Это, к сожалению, не представляется возможным в интуитивно понятным способом. Что вы хотите быть включены в хэш-код? Данные ItemStack NBT? Только это предмет? Это повреждение товара и значение? А как насчет размера стека?
Каждый человек имеет различные варианта использования и поэтому это не практично, чтобы заменить его.
Единственным значимым способом было бы проверить все (в том числе размер стека). Но тогда рецепт просмотрах (который вы, скорее всего, со ссылкой на здесь) нет проще, потому что ItemStack с STACKSIZE 5 не равно к ItemStack с STACKSIZE 1, несмотря на то, что рецепт должен все еще соответствовать. То же самое для данных НБТ и других вещей."

Я когда-то давно спрашивал:
http://www.minecraftforge.net/forum/index.php?topic=24978.0
 
1,137
5
2
**тут были плохие слова**
Ладно, последний способ вроде помог
 
1,137
5
2
Почитал про гуаву и убедился, что гугл делают хорошие либы
 
Сверху