cannot be cast to java.lang.Comparable

marsch22

Neues Mitglied
Hallo,

ich hab das Beispiel aus "Java ist auch eine Insel".
Mich würde mal interessieren was ich falsch gemacht habe.

Ich will das Objekt mit Arrays.sort() sortieren. Exception kommt.


Exception in thread "main" java.lang.ClassCastException: p1.Magazine cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.ComparableTimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at p1.A12_Interface.main(A12_Interface.java:60)


Java:
package p1;

import java.util.Arrays;

interface Serializable
{	
}

interface Buyable {
	double price();
}

abstract class GameObject implements Serializable
{
  protected String name;

  protected GameObject( String name )
  {
    this.name = name;
  }
}


class Magazine extends GameObject implements Buyable, Comparable<Magazine>
{
  private double price;

  public Magazine( String name, double price )
  {
    super( name );
    this.price = price;
  }

  @Override public double price()
  {
    return price;
  }

  @Override public int compareTo( Magazine that )
  {
    return Double.compare( this.price(), that.price() );
  }

  @Override public String toString()
  {
    return name + " " + price;
  }
}

class A12_Interface {
	public static void main(String args[]) {
		Magazine             m1  = new Magazine( "Spiegel", 4.0 );
		Magazine           m2  = new Magazine( "Mad Magazine", 2.50 );
		Magazine               m3  = new Magazine( "Bild", 0.50 );
		Magazine              m4  = new Magazine( "Gamestar", 5.50 );

		Magazine[] mags = new Magazine[] { m1, m2, m3, m4};
		
		Arrays.sort(mags);
		System.out.println(Arrays.toString(mags));
		}
	}
 
wenn irrerweise ein Interface Serializable selber angelegt wird, kann man das fast auch für Comparable vermuten,
wobei nicht gepostet, und das müsste generisch sein, recht schwierig..

Arrays.sort() würde sich jedenfalls nicht für das eigene Interface interessieren sondern nur für java.lang.Comparable
 

Zurück
Oben