java.lang.ClassCastException bei Interface

  • Ich möchte ein Interface schreiben und soll dafür eine Methode schreiben, die zwei Zahlen aus einem Stack addiert. Die Übersetzung klappt, das Ausführen aber nicht. Wenn ich das Hauptprogramm ausführe, bekomme ich folgende Fehlermeldungen:

    Code
    java.lang.NoSuchMethodException: AddOperation.<init>()
    	at java.lang.Class.getConstructor0(Class.java:2678)
    	at java.lang.Class.getConstructor(Class.java:1629)
    	at Main.saveAddOperation(Main.java:24)
    	at Main.registerOperations(Main.java:35)
    	at Main.<init>(Main.java:17)
    	at Main.main(Main.java:81)

    Was zum Henker will Java mir damit sagen? Die Klasse sieht wie folgt aus:

    Java
    import java.util.Stack;
    class AddOperation {
        public static final double EPSILON = 0.000000001;
        public void execute (Stack<Double> op) throws InvalidParameterException {
            ... Code für die Addition ...
        }
        public String getOperationSymbol () { ... }
    }

    Was mach' ich falsch?

  • Ich dachte, dass das Programm bis nächste Woche abzugeben ist. Dem ist aber nicht so. Also werde ich die Grundlagen für die Umsetzung vermutlich erst noch in der Vorlesung hören.

  • gehört eigentlich ins eprog-forum zu beispiel 6...

    wie rufst du das programm auf? die operations-classfiles müssen beim ausführen im classpath gefunden werden. ausführen nach angabe:

    Code
    java -cp ".;main.jar" Main < Operations.i1 > Operations.out1

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    &#128513;&#128514;&#128515;&#128516;&#128517;&#128518;&#128519;&#128520;&#128521;&#128522;&#128523;&#128524;&#128525;&#128526;&#128527;&#128528;&#128530;&#128531;&#128532;&#128534;&#128536;&#128538;&#128540;&#128542;&#128544;&#128545;&#128546;&#128547;&#128549;&#128552;&#128553;&#128554;&#128555;&#128557;&#128560;&#128561;&#128562;&#128563;&#128565;&#128566;&#128567;

  • Was zum Henker will Java mir damit sagen?

    Es will dir sagen, dass diese Klasse keinen Konstruktor hat.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • MUSS es denn einen Konstruktor geben? Die Klasse enthält doch nur Methoden!

    Und aufrufen tu ich die Klasse über: Username$ java Main
    Ich habe Main.jar entpackt.

    Wie gesagt, ich werde auf weitere Infos von der Vorlesung warten, bevor ich euch weiter quäle.
    Vielen Dank erstmal!

  • Ja, brauchst du.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Eine Klasse hat in Java immer einen Konstruktor. Wenn du selber keinen definierst, dann wird automatisch ein Konstruktor ohne Parameter angelegt, der keinen code enthaelt:

    Code
    public AddOperation(){}

    einen solchen Konstruktor, der keine argumente/parameter enthaelt, nennt man in Java auch den "Defaultkonstruktor".

    Es wird aber nur dann ein Konstruktor angelegt, wenn du selber keinen definiert hast!

    Deine Fehlermeldung besagt nun: "Es wird ein Konstruktor ohne Parameter aufgerufen, aber er gibt keinen solchen Konstruktor. Vermutlich hast du also einen eigenen Konstruktor angelegt, der parameter enthaelt. Zum Beispiel sowas:

    Code
    public AddOperation(int firstOperand, int secondOperand){
      this.firstOperand = firstOperand;
      this.secondOperand = secondOperand;
    }

    und dann versucht, den (jetzt nicht existierenden) Defaultkonstruktor aufzurufen:

    Code
    class Main{
      ...
      public static void saveAddOperation(){
        ...
         //Fehler! diesen leeren Konstruktor gibt es nicht.
         AddOperation addOperation = new AddOperation(); 
        ...
      }
      ...
    }


    was du machen kannst ist jetzt entweder den default konstruktor selber anlegen, oder den anderen loeschen, oder statt des default konstruktors den anderen aufzurufen:

    Code
    class Main{
      ...
      public static void saveAddOperation(){
        ...
         AddOperation AddOperation = new AddOperation(10,17); 
        ...
      }
      ...
    }

    lg, Benjamin Ferrari, bookworm.at

    2 Mal editiert, zuletzt von a9bejo (6. Dezember 2008 um 13:53)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!