Klassen Methode aus anderer Klasse nicht aufrufbar

Mitial

Mitglied
Hallo,
ich möchte eine Methode aus einer anderen Klasse über ein Interface ansprechen. Allerdings lässt sich das Objekt ja nicht anlegen, ohne für das Interface die Klasse festzulegen auf die es sich bezieht. Allerdings handelt es sich um eine Liste, die gelöscht wird, wenn ich das Objekt zuweise. Wie kann ich dies umgehen. Ich hoffe die Fragestellung ist verständlich, wenn nicht kann ich gerne näher darauf eingehen und meinen Code posten.

MfG
 

Mitial

Mitglied
Hier das verwendete Interface:
public interface PersonIterator extends java.util.Iterator<Person> {
void print();
String smallest();
boolean hasNext();
Person next();
void remove();
}

Erstellen des Interface-Objektes:
private static PersonIterator pi;

Zugriff auf das Interface:
public static void iteratorPrint() {
pi.print();
}

Das Objekt sollte doch so nutzbar sein, da es static ist? Ich bekomme eine NullPointerException in diesem Fall, ich weiß nicht wieso. Wenn ich das Objekt zuweise: pi = new PersonQueue(); (PersonQueue ist die Klasse die über das Interface angesprochen wird) dann wird eine neue Liste erstellt und meine alte, bereits erstellte Liste gelöscht, dies möchte ich also umgehen.
 

Mitial

Mitglied
Vielen dank schonmal für die schnelle Antwort :)
Java:
import java.util.Iterator;
import java.lang.Iterable;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.InputMismatchException;

public class PersonQueue implements Queue, PersonIterator {
    private List li;
    private final String PERSON_TAG = "[PersonQueue]";
    final static String lineSeparator = System.getProperty("line.separator");
    //Person pers = new Person("hans","werner",22);


    /**
     * Constructor
     */
    public PersonQueue(){
        li = new List();
    }

    /**
     * Fügt am Ende des Queues ein Objekt hinzu, vorzugsweise eine Person
     * @param o Person zum hinzufügen
     */

    public void addLast(Object o){
        li.addLast(o);
    }

    /**
     * Löscht Objekt am anfang des Queues
     * @return Kopie des Objekts
     */
    public Object removeFirst(){
        Person tmp;
        tmp = (Person)li.getFirst();
        li.removeFirst();
        return tmp;
    }

    /**
     * Get funktion für ein objekt mit index i
     * @param i Index
     * @return Objekt mit index i
     */

    public Object get(int i){
        Person tmp;
        tmp = (Person)li.get(i);
        return tmp;
    }

    /**
     * Testet ob Queue leer ist
     * @return true wenn leer
     */

    public boolean empty() {

        boolean r = true;

        for (int i = 0; i < li.size(); i++) {

            if (li.get(i) != null) {

                r = false;

            }
        }
        return r;
    }

    /**
     * Löscht aktuelle Liste
     */
    public void clear() {
        li.clear();
    }


    /**
     * Testet ob Queue voll ist
     * @return true wenn voll
     */
    public boolean full(){
        boolean r = true;
        for (int i = 0; i < li.size(); i++) {

            if (li.get(i) == null) {

                r = false;

            }
        }
        return r;
    }

    /**
     * Größe des Queues
     * @return Größe
     */

    public int size(){

        return li.size();
    }

    /**
     * Speichert Liste in einer Text Datei
     * @param path pfad zur Datei
     * @param name Name der Datei
     */
    public void queueSave(String path,String name) {
        name = name.trim();
        path = path.trim();
        if (name.equals("") || path.equals("")){
            throw new InputMismatchException();
        }
        String zeile;
        try {
            zeile = PERSON_TAG + lineSeparator;
            path = path+"/"+name+".txt";
            BufferedWriter writer = new BufferedWriter(new FileWriter(path,false));
            writer.write(zeile);
            for (int i = 0; i < li.size(); i++) {
                zeile = li.get(i).toString() + lineSeparator;
                writer.append(zeile);
            }
            writer.close();
        } catch (Exception e) {
        }
    }

    /**
     * Läd Liste aus Text Datei
     * @param path Pfad zur Datei
     * @param name Name der Datei
     */
    public void queueLoad(String path, String name) {
        BufferedReader rd;
        String line;
        li.clear();
        try {
            rd = new BufferedReader(new FileReader(path+"/"+name+".txt"));
            line = rd.readLine();
            if (line.equals(PERSON_TAG))
                while((line = rd.readLine()) != null){
                    addLast(deserialize(line));
                }

        } catch (Exception e){
        }
    }

    /**
     * Deserialisiert gegebene Strings und wandelt sie um
     * @param object gegebener Serialisierter String
     * @return Umgewandeltes Personen Objekt
     */
    public Person deserialize(String object){
        String vorname, nachname;
        int alter, pos;
        Person r;

        object = object.trim();

        pos = object.indexOf(",");
        nachname = object.substring(0, pos);
        object = object.substring(pos+2).trim();

        pos = object.indexOf(";");
        vorname = object.substring(0, pos);
        object = object.substring(pos+2).trim();

        alter = Integer.parseInt(object);

        r = new Person(vorname, nachname, alter);
        return r;
    }


    public void print() {
        if (li.size == 0) {
            System.out.println("size = 0");
        } else {
            Iterator<Person> itr = li.iterator();
            System.out.println("Personen: ");
            while (itr.hasNext()) {
                Person pers = itr.next();
                System.out.println(pers + " ");
            }
        }
    }

    public String smallest() {
        String r = "";
        return r;
    }

    public boolean hasNext() {
        return true;
    }

    public Person next() {
        Person p = new Person("","",0);
        return p;
    }

    public void remove() {

    }



    /**
     * Rückt Queue elemente zusammen
     */
/*
    private void fill(){
        for (int i = 0; i < q.length -1; i++){
            if(q[i] == null){
                q[i] = q[i+1];
                q[i+1] = null;
            }
        }
    }
*/

}

Die methode die ich momentan versuche aus einer anderen Klasse anzusprechen ist die print() Methode.
 

JStein52

Top Contributor
Wenn ich das Objekt zuweise: pi = new PersonQueue(); (PersonQueue ist die Klasse die über das Interface angesprochen wird) dann wird eine neue Liste erstellt und meine alte, bereits erstellte Liste gelöscht, dies möchte ich also umgehen.
Ein bisschen unverständlich. Natürlich muss dieses new irgendwo stehen. Aber im bisher geposteten Code ist nicht versichtlich wo das denn nun steht
 

Mitial

Mitglied
Ein bisschen unverständlich. Natürlich muss dieses new irgendwo stehen. Aber im bisher geposteten Code ist nicht versichtlich wo das denn nun steht

Tut mir leid dass die ganze Frage etwas unübersichtlich ist. Um das Problem genau zu beschreiben: Gibt es eine möglichkeit, dass ich ein Objekt für das Interface anlege, ohne den Konstruktor der Klasse personenQueue anzusprechen? Wenn nicht, gibt es die Möglichkeit eine Liste in dieses Objekt zu kopieren?
 

JStein52

Top Contributor
Wenn du bereits ein Objekt der Klasse PersonQueuehast kannst du pi einfach dorthin zeigen lassen indem du schreibst:
Code:
pi = meinVorhandenesObjekt;  // wo auch immer meinVorhandenesObjekt erzeugt wird

Edit: und ein Objekt dieser Klasse erzeugen ohne dass der Konstruktur ausgeführt wird geht nicht.
 

Mitial

Mitglied
Wenn du bereits ein Objekt der Klasse PersonQueuehast kannst du pi einfach dorthin zeigen lassen indem du schreibst:
Code:
pi = meinVorhandenesObjekt;  // wo auch immer meinVorhandenesObjekt erzeugt wird

Edit: und ein Objekt dieser Klasse erzeugen ohne dass der Konstruktur ausgeführt wird geht nicht.

Das Problem ist, das ich zwar ein Objekt habe, das Objekt wird allerdings von einem anderen Interface genutzt und kann daher nicht verwendet werden. Der Code ist ziemlich lang, er besteht insgesamt aus 5 Klassen und 3 Interfaces, daher wollte ich nicht alles posten.

Ich habe dieses Objekt:
Java:
 q = new PersonQueue()

q ist allerdings ein anderes Interface. Gibt es die Möglichkeit dieses Objekt trotzdem zu nutzen?

Oder gibt es die Möglichkeit ein Objekt anzulegen, so dass die Liste, die danach über das andere Interface angelegt wird, nicht überschrieben wird?
 

JStein52

Top Contributor
Ich verstehe deine Ausdrucksweise nicht so recht. q ist eine Instanz der Klasse PersonQueue und diese scheint ja sämtliche Interfaces zu implementieren. Und deshalb kannst du auch für dieses q die Methode print() des PerrsonIterator's aufrufen. Könnte höchstens sein dass du beim Aufruf casten musst, weiss ich gerade nicht auswendig. Ausprobieren !
 

Mitial

Mitglied
Ich verstehe deine Ausdrucksweise nicht so recht. q ist eine Instanz der Klasse PersonQueue und diese scheint ja sämtliche Interfaces zu implementieren. Und deshalb kannst du auch für dieses q die Methode print() des PerrsonIterator's aufrufen. Könnte höchstens sein dass du beim Aufruf casten musst, weiss ich gerade nicht auswendig. Ausprobieren !

Ja hatte es eben ausprobiert, mit casten ging es dann. Vielen dank :)
 

mrBrown

Super-Moderator
Mitarbeiter
Ja hatte es eben ausprobiert, mit casten ging es dann. Vielen dank :)
Casten sollte nicht nötig sein, wenn du p als das deklarierst, als dass du es benutzt. Wenn du es als PersonIterator brauchst, solltest du es dementsprechend deklarieren, wenn du es als Queue und PersonIterator brauchst, als PersonQueue.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
M Klassen Methode in anderer Klasse aufrufen? Java Basics - Anfänger-Themen 3
M Methode in anderer Klasse aufrufen Java Basics - Anfänger-Themen 5
B Mit methode Objekt aus anderer Klasse erstellen Java Basics - Anfänger-Themen 6
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
J Methoden Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 12
L Klassen Methode aus anderer Klasse Java Basics - Anfänger-Themen 13
F Methode anderer Klasse aufrufen Java Basics - Anfänger-Themen 1
P Aufruf Methode anderer Klasse Java Basics - Anfänger-Themen 5
I Rückgabewert einer Methode in anderer Klasse verwenden Java Basics - Anfänger-Themen 2
M Dynamische Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 11
T [Erledigt] Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 0
L Erste Schritte Methode aus anderer Klasse verwenden Java Basics - Anfänger-Themen 16
C Problem mit Zugriff auf Variable bzw. get-Methode in anderer Klasse Java Basics - Anfänger-Themen 2
A Methode aus anderer Klasse Java Basics - Anfänger-Themen 5
H Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 7
C Objekt X über Methode aus anderer Klasse verändert Java Basics - Anfänger-Themen 3
I Von einer Methode eines Objektes auf Attribut eines Objektes anderer Klasse zugreifen Java Basics - Anfänger-Themen 4
S Main-Methode aus anderer Klasse heraus starten Java Basics - Anfänger-Themen 8
S Zugriff auf Methode anderer Klasse Java Basics - Anfänger-Themen 6
T Aufrufen von get-Methode aus anderer Klasse (absolute Anfängerfrage) Java Basics - Anfänger-Themen 2
J Methode anderer Klasse aufrufen ;-) Java Basics - Anfänger-Themen 5
B Methode aus anderer Klasse verwenden Java Basics - Anfänger-Themen 11
E Methode aus anderer Klasse ausführen Java Basics - Anfänger-Themen 3
I Festellen wann Methode in anderer Klasse fertig ist Java Basics - Anfänger-Themen 5
G Kann methode aus anderer Klasse nicht aufrufen Java Basics - Anfänger-Themen 7
G private methode wird aus anderer klasse aufgerufen? Java Basics - Anfänger-Themen 3
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
B Schleife von anderer Methode stoppen? (Start continue) Java Basics - Anfänger-Themen 18
PaperHat Methoden als Parameter anderer Methode verwenden Java Basics - Anfänger-Themen 11
T Methoden Auf Variabler aus anderer Methode zugreifen Java Basics - Anfänger-Themen 5
N Variablen Variable in Main deklarieren und in anderer Methode nutzen Java Basics - Anfänger-Themen 12
P Methoden Methode in anderer Methode aufrufen Java Basics - Anfänger-Themen 4
Mr. Pink Graphics2D in anderer Methode aufrufen Java Basics - Anfänger-Themen 6
I Im JFrame Inhalte verändern per Methode aus anderer Class Java Basics - Anfänger-Themen 5
D Methoden Methode in anderer .class Datei Funktioniert nicht. Java Basics - Anfänger-Themen 11
M OOP ActionPerformed Methode aus anderer AP aufrufen? Java Basics - Anfänger-Themen 5
M Aus anderer Methode painten Java Basics - Anfänger-Themen 2
I Kein Zugriff auf erstelltes Objekt aus anderer Methode Java Basics - Anfänger-Themen 6
H Methode aus anderer Datei aufrufen Java Basics - Anfänger-Themen 11
D Variable einer Methode in anderer Methode aufrufen Java Basics - Anfänger-Themen 19
G JTabbedPane zugriff von anderer Methode Java Basics - Anfänger-Themen 2
S JTextField in anderer Classe mit getter Methode auslesen. Java Basics - Anfänger-Themen 2
A Auf ausgewählte Items der Liste in anderer Methode zugreifen Java Basics - Anfänger-Themen 3
EagleEye methode in anderer java datei aufrufen Java Basics - Anfänger-Themen 27
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
M generate Methode für Streams Java Basics - Anfänger-Themen 6
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
I Optionaler Parameter bei Methode, der nur optional ist? Java Basics - Anfänger-Themen 6
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
T Linked List set-Methode Java Basics - Anfänger-Themen 2
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben