Datentypen Frage bezüglich unbekannter Fehlermeldungen.

N00b92

Mitglied
Hallo liebe User,

ich übe gerade bisschen Programmieren und hab mir einfach eine Aufgabe ausm Internet gezogen.
In dieser Aufgabe geht es um generische Klassen.

Ich habe alles verstanden und kann das auch soweit umsetzten.
Trotzdem bekomm ich eine Fehlermeldung, die ich noch nie hatte und deswegen nicht interpretieren kann.
Kann mir jemand sagen was die Fehlermeldung zu bedeuten hat?
Allerdings taucht die Fehlermeldung nur bei zwei Methoden ein.


Fehlermeldung:
screenshot2014-07-31at10.40.39.png


Java-Code:


Interface IntegerList
Java:
public interface IntegerList <T> {
    
    public int getLength();
    
    public int insertLast(T value);
    
    public T getFirst();
    
    public int deleteFirst();
    
    public boolean search(T value);
    
    public void print();
    

}


Klasse ArrayIntegerList implements IntegerList
Java:
public class ArrayIntegerList <T> implements IntegerList {

    private int pointer = 0;
    private T array[]=null;

    ArrayIntegerList(int length) {

        this.array = (T[]) new Object[length];

    }

    public int insertLast(T value) {

        if (this.pointer < array.length) {
            this.array[this.pointer] = value;

            this.pointer++;
            return 0;
        }

        return -1;

    }

    public T getFirst() {
        return this.array[0];
        
    }

    public int deleteFirst() {

      T temp_value;
      temp_value=this.array[0];
      
      if(this.pointer>=1){
      for(int i=0;i<this.pointer;i++){
          array[i]=array[i+1];
      }
      pointer--;
      return 0;
      }
      return -9999;
      
      

    }

    public int getLength() {
        return this.array.length;
    }

    public boolean search(T value) {

        for (int i = 0; i < this.pointer; i++) {
            if (this.array[i] == value) {

                return true;
            }

        }
        return false;
    }

    public void print() {

        for (int i = 0; i < this.pointer; i++) {
            System.out.println("[" + i + "] - " + this.array[i]);
        }

    }

   
}


Hauptprogramm/Main
Java:
public class Hauptprogramm {

    public static void main(String[] args) throws IOException {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        int length;
        int option_switch = 0;
        int option_typ;
        double double_value;
        int int_value;
        int int_return_value;
        double double_return_value;
        
        Object  arr1[], arr2[];

        System.out.print("Bitte Arraylaenge eingeben.: ");
        length = Integer.parseInt(in.readLine());

        System.out.print("\n[1] - Integer\n[2] - Double\n\nBitte waehlen.:");
        option_typ = Integer.parseInt(in.readLine());
        
        ArrayIntegerList obj;

        if (option_typ == 1) {

           obj = new ArrayIntegerList<Integer>(length);

        } else {
            obj = new ArrayIntegerList<Double>(length);

        }

        do {

            System.out.print("\n[0] - Beenden\n[1] - InsertLast\n[2] - GetFirst\n[3] - DeleteFirst\n[4] - GetLength\n[5] - Search\n[6] - Print\n\n Bitt waehle.:");
            option_switch = Integer.parseInt(in.readLine());

            switch (option_switch) {

                case 0:

                    System.out.print("Programm wird beendet!\n");
                    System.exit(1);
                    break;

                case 1:
                    System.out.print("Bitte Wert eingeben.: ");
                    if (option_typ == 1) {
                        int_value = Integer.parseInt(in.readLine());

                        if (obj.insertLast(int_value) == 0) {
                            System.out.print("Wert wurde gespeichert!");
                            break;
                        }
                        System.out.print("Wert wurde nicht gespeichert!");

                    } else {
                        double_value = Double.parseDouble(in.readLine());

                        if (obj.insertLast(double_value) == 0) {
                            System.out.print("Wert wurde gespeichert!");
                            break;
                        }
                        System.out.print("Wert wurde nicht gespeichert!");

                    }

                    break;

                case 2:
                    System.out.println("Der erste Wert.: " + obj.getFirst());
                    break;

                case 3:
                    if (option_typ == 1) {
                        int_return_value = obj.deleteFirst();
                        if (int_return_value == 0) {
                            System.out.println("Der geloeschte Wert.: " + int_return_value);
                        }
                        System.out.println("Wert konnte nicht geloescht werden!");
                        break;

                    } else {
                        double_return_value = obj.deleteFirst();
                        if (double_return_value == 0) {
                            System.out.println("Der geloeschte Wert.: " + double_return_value);
                        }
                        System.out.println("Wert konnte nicht geloescht werden!");
                        break;

                    }

                case 4:
                    System.out.println("Arraylaenge.: " + obj.getLength());
                    break;

                case 5:
                    System.out.print("Bitte Wert eingeben.: ");

                    if (option_typ == 1) {
                        int_value = Integer.parseInt(in.readLine());
                        if (obj.search(int_value)) {
                            System.out.print("Wert wurde gespeichert!");
                        }
                        System.out.print("Wert wurde nicht gespeichert!");
                        break;
                    } else {

                        double_value = Double.parseDouble(in.readLine());
                        if (obj.search(double_value)) {
                            System.out.print("Wert wurde gespeichert!");
                        }
                        System.out.print("Wert wurde nicht gespeichert!");
                        break;

                    }

                case 6:
                    obj.print();

                    break;

            }
        } while (option_switch != 0);

    }

}

Waere dankbar fuer ne kleine Hilfe!
Danke im vorrasu! 😀
 
Das Problem ist, du hast vergessen dein Generic T an IntegerList weiterzugeben. Ein Generic gilt nur innerhalb eines Objektes mit dem es definiert wurde. Wenn du ArrayIntegerList initialisierst mit
Java:
new ArrayIntegerList<Integer>()
dann kennt das Interface IntegerList diesen generischen Typ nicht, du musst der Klasse also den selben generischen Typen bekannt machen und zwar so:
Java:
public class ArrayIntegerList <T> implements IntegerList<T> {

Genau das sagt auch deine Warnmeldung aus die du bekommst: "Die Unterklasse ArrayIntegerList hat eine Methode mit dem selben (Namen) "search (T)", überschreibt diese aber nicht."
Normalerweise würde der Compiler automatisch die Methode der Oberklasse mit der Methode der Unterklasse überschreiben, er weiß aber in deinem Falle nicht um was für Objekttypen es sich bei T und T handelt (Der Sinn von Generics) und gibt eine Warnung zurück.
Und wie bereits gesagt, dazu musst du die beiden Generics zu dem selben Objekttyp definieren mit der oben genannten Methode.

Grüße
Net
 
Zuletzt bearbeitet:

Zurück
Oben