Избыточное соответствие протокола UITextFieldDelegate [дубликат]

Методы Equals и Hashcode в Java

Это методы класса java.lang.Object, который является суперклассом всех классов (пользовательских классов и других, определенных в java API).

Реализация:

public boolean equals (Object obj)

public int hashCode ()

blockquote>

public boolean equals (Object obj)

Этот метод просто проверяет, ссылаются ли на два объекта ссылки x и y на один и тот же объект. т.е. он проверяет, если х == у

Это рефлексивно:.. для любого опорного значения х, x.equals (х) должна возвращать верно

Он симметричен: для любых ссылочных значений x и y, x.equals (y) должен возвращать true тогда и только тогда, когда y.equals (x) возвращает true.

Это транзитивно: для любых ссылочных значений x, y и z, если x.equals (y) возвращает true, а y.equals (z) возвращает true, тогда x.equals (z) должно возвращать true.

Согласовано: для любых ссылочных значений x и y, множественные вызовы x.equals (y) последовательно возвращают true или последовательно возвращают false, если никакая информация не используется при равных сравнениях на объект изменяется.

Для любого ненулевого опорного значения х, x.equals (NULL) должен возвращать FALSE.

BLOCKQUOTE>

общественных Int хэш-код ( )

Этот метод возвращает значение хеш-кода для объекта, на который вызывается этот метод. Этот метод возвращает значение хеш-кода как целое число и поддерживается для использования классов сбора на основе хэширования, таких как Hashtable, HashMap, HashSet и т. Д. Этот метод должен быть переопределен в каждом классе, который переопределяет метод equals.

Общий контракт hashCode:

Всякий раз, когда он вызывается одним и тем же объектом более одного раза во время выполнения приложения Java, метод hashCode должен последовательно возвращать одно и то же целое число, если никакая информация не используется на равных сопоставления по объекту изменены.

Это целое число не должно оставаться согласованным с одним исполнением приложения на другое выполнение того же приложения.

Если два объекта равны в соответствии с методом equals (Object), то вызов метод hashCode для каждого из двух объектов должен давать одинаковый целочисленный результат.

Не требуется, чтобы, если два объекта неравны в соответствии с методом equals (java.lang.Object), то вызов hashCode метод на каждом из двух объектов должен производить различные целочисленные результаты. Тем не менее, программист должен знать, что создание отдельных целочисленных результатов для неравных объектов может улучшить производительность хэш-таблиц.

Равные объекты должны создавать одинаковый хэш-код, если они равны, однако неравные объекты

blockquote>

Ресурсы:

JavaRanch

Изображение

45
задан Martin R 16 June 2015 в 13:40
поделиться

3 ответа

Вы получите это сообщение об ошибке в Xcode 7 (Swift 2), если подкласс объявляет соответствие протоколу, который уже унаследован от суперкласса. Пример:

class MyClass : CustomStringConvertible {
    var description: String { return "MyClass" }
}

class Subclass : MyClass, CustomStringConvertible {
    override var description: String { return "Subclass" }
}

Журнал ошибок показывает:

main.swift:10:27: error: redundant conformance of 'Subclass' to protocol 'CustomStringConvertible'
class Subclass : MyClass, CustomStringConvertible {
                          ^
main.swift:10:7: note: 'Subclass' inherits conformance to protocol 'CustomStringConvertible' from superclass here
class Subclass : MyClass, CustomStringConvertible {
      ^

Удаление соответствия протокола из декларации подкласса решает проблему:

class Subclass : MyClass {
    override var description: String { return "Subclass" }
}

Но суперкласс должен объявить соответствие явно, это не будет автоматически выведено из существования свойства description.

86
ответ дан Martin R 26 August 2018 в 03:40
поделиться

Для гуглеров я также получил эту ошибку, включив SwiftyJson в мою целевую аудиторию и добавив быстрый тестовый класс, поскольку он заставил SwiftyJson снова скомпилироваться и объявляет NSNumber как Comparable. Решение должно было включать его только в целевую программу.

6
ответ дан Christopher Pickslay 26 August 2018 в 03:40
поделиться

Дело в том, что ваш GraphFeatureNumbersetRange является подклассом NSObject. Что в свою очередь уже соответствует CustomStringConvertible! Это оно! Просто удалите этот избыточный протокол. Теперь вы объявляете это дважды! : -)

0
ответ дан Vitya Shurapov 26 August 2018 в 03:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: