Я следующий случай классучехла класс равенство Массивы
case class Something(val input : Array[Int], val output : Array[Int] = null, val remainder : Array[Int] = null, val next : Something = null) {
override def equals(thatGeneric: scala.Any): Boolean = {
if(!thatGeneric.isInstanceOf[Something])
return false
val that = thatGeneric.asInstanceOf[Something]
val thisInput = if(this.input == null) null else this.input.deep
val thatInput = if(that.input == null) null else that.input.deep
val thisOutput = if(this.output == null) null else this.output.deep
val thatOutput = if(that.output == null) null else that.output.deep
val thisRemainder = if(this.remainder == null) null else this.remainder.deep
val thatRemainder = if(that.remainder == null) null else that.remainder.deep
return (thisInput,thisOutput,thisRemainder,this.next) == (thatInput,thatOutput,thatRemainder,that.next)
}
/**
* TODO fix hashcode in case I want to use this in collection
* @return
*/
override def hashCode(): Int = super.hashCode()
}
Я знаю, что классы случае должны иметь свои равные и методы Hashcode, созданные для вас, но для массивов, начиная с ==
не работаю, то я думаю, вот почему это не работает для моего класса case.
Есть ли лучший способ не писать вручную мои методы equals и hashCode для моего класса case?
Примечание: Я также приветствую советы о том, почему/как улучшить мой ток равен методу
Edit: Не ценят заметки о моем использовании прецедентного класса в целом, но мой вопрос был в основном: Предположим, у вас есть необходимость из массива в вашем классе case, как вы избегаете перематывать свои собственные равные и hashCode. (Если ответ заключается в том, что его невозможно, и мне нужно использовать список, то это ответ, просто не уверен, что это так.)
Есть ли причина, по которой вы хотите использовать 'Array', а не' List'? Класс случая традиционно предназначен для хранения неизменной структуры данных. –