2016-04-07 37 views
0
aşağıdaki hata

ben varsaydımHata: == geçersiz kılma

1 class Foo { 
2 int foo; 

3 Foo(this.foo); 

4 bool operator ==(Foo a) => foo == a.foo; 
5 int get hashCode => foo * 17; 
6 } 

7 class Bar extends Foo { 
8 int bar; 

8 Bar(int foo, this.bar) : super(foo); 

10 bool operator ==(Bar a) => (bar == a.bar) && (foo == a.foo); 
11 int get hashCode => bar * (foo * 17); 
12 } 

Bar alt tipi olduğunu Foo. Bu kodla ilgili sorun nedir?

+0

Hatayla ilgili olarak, işleç == 'yöntemi herhangi bir' Nesne'yi kabul etmelidir. Yukarıdaki koda sahipseniz ve aynı 'HashSet'de' Bar' ve 'Foo' varsa, o zaman bar == foo'yu yapmaya çalıştığında hata yaparsınız, çünkü' Bar.operator == 'doesn ' Bir foo kabul et. – lrn

cevap

1

Bu bir hata olmayabilir. Ben sadece == operatörünün etkili bir şekilde çalışmak için bir Nesne türü olması gerektiğini fark ettim. Daha iyi bir hata mesajı yardımcı olacaktır.

+0

Daha önce de belirttiğiniz gibi, == operatörünü geçersiz kıldığınızda, parametre Object türünde olmalı ve ayrıca hashCode getter değerini de geçersiz kılmalısınız. Sadece iyi bir kaynak eklemek istedim - http://work.j832.com/2014/05/equality-and-dart.html – Mark

+0

Teşekkürler. İyi makale! – jfp