Avatar billede driis Nybegynder
08. februar 2004 - 18:17 Der er 7 kommentarer og
1 løsning

Klasse, der implementerer interface Comparable - hvordan ?

Hvis man ønsker at lave en klasse der implementerer interface Comparable - skal man så implementere en compareTo funktion, der kan bruges med alle andre klasser, der implementerer Comparable ? Og i bekræftende fald, hvordan gør man det ?

Jeg vil meget gerne se et eksempel :-)
Avatar billede arne_v Ekspert
08. februar 2004 - 18:42 #1
Du skal implementere en compareTo.

Normalt sammenligner man kun en klasse med sin egen type.
Avatar billede arne_v Ekspert
08. februar 2004 - 18:53 #2
Effective Java / Joshua Bloch:

"It is permitted to throw ClassCastException if the two object references being
compared refer to objects of different classes. Usuallly that is exactly what
compareTo shpuld do under theese circumstances. While the contact does not preclude
interclass comparisons, there are as of release 1.4 no classes in the Java
platform libraries that support them."
Avatar billede arne_v Ekspert
08. februar 2004 - 18:56 #3
Så derfor er:

int compareTo(Object o) {
  Foobar fbo = (Foobar)o;
  return (attr - fbo.attr);
}

eller:

int compareTo(Object o) {
  Foobar fbo = (Foobar)o;
  return attr.compareTo(fbo.attr);
}

normalt OK.
Avatar billede driis Nybegynder
08. februar 2004 - 18:57 #4
Ja, men hvis jeg kun implementerer

int compareTo(MyClass m)
{
...
}

Brokker compileren sig. Hvis jeg sammen med ovenstående laver:
int compareTo(System.Object o)
{
...
}

Kan det kompileres. Men så kan compareTo på objekter af klassen MyClass jo kaldes med alle objekter som argument. Er der ikke en måde at undgå dette ?
Avatar billede arne_v Ekspert
08. februar 2004 - 19:07 #5
Som i mine eksempler:

int compareTo(Object o) {
  MyClass mco = (MyClass) o;
  ...
}

argumentet skal være Object for at signaturen passer med den i interfacet.

Den kan prinicipielt kaldes med objekter af enhver type, men linien:

MyClass mco = (MyClass) o;

vil give dem en ClassCastException lige i synet hvis de forsøger !
Avatar billede driis Nybegynder
08. februar 2004 - 19:10 #6
OK, det ser jeg nu. Jeg havde kun set din første kommentar sidst jeg kommenterede.
Du må gerne lægge et svar.
Avatar billede arne_v Ekspert
08. februar 2004 - 19:13 #7
svar
Avatar billede arne_v Ekspert
08. februar 2004 - 19:41 #8
Husk at implementere equals og hashCode når du laver compareTo.

Hvis det ikke er hensigtsmæssigt så overvej en Comparator klasse
i.s.f. at implementere Compareable.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB