Note: uses unchecked or unsafe operations

RalfiBB

Neues Mitglied
Hallo. Beim kompilieren von Listing0907.java (Guido Krüger - Handbuch der Java-Programmierung) bekomme immer ein Meldung: "Note: uses unchecked or unsafe operations". Kann mir jemand sagen, wie kann ich das beseitigen? Danke.

Code:
/* Listing0907.java */

public class Listing0907
{
	public static Object getSmallest(Comparable[] objects)
	{
		Object smallest = objects[0];
		
		for(int i = 1; i < objects.length; ++i) {
			if(objects[i].compareTo(smallest) < 0) {
				smallest = objects[i];
			}
		}
		
		return smallest;
	}
	
	public static void bubbleSort(Comparable[] objects)
	{
		boolean sorted;
		
		do {
			sorted = true;
			
			for(int i = 1; i < objects.length - 1; ++i) {
				if(objects[i].compareTo(objects[i + 1]) > 0) {
					Comparable tmp = objects[i];
					objects[i] = objects[i + 1];
					objects[i + 1] = tmp;
					sorted = false;
				}
			}
		} while(!sorted);
	}
	
	public static void main(String[] args)
	{
		// Erzeugen eines String-Arrays
		Comparable[] objects = new Comparable[4];
		objects[0] = "STRINGS";
		objects[1] = "SIND";
		objects[2] = "PAARWEIST";
		objects[3] = "VERGLEICHBAR";
		
		// Ausgeben der kleinsten Elements
		System.out.println((String)getSmallest(objects));
		System.out.println("--");
		
		// Sortieren und Ausgaben
		bubbleSort(objects);
		
		for(int i = 0; i < objects.length; ++i) {
			System.out.println((String)objects[i]);
		}
	}
	
}
 

Joose

Top Contributor
1. Ist diese Meldung ein Warning -> sprich Code kompiliert, warum willst du dieses Warning unbedingt weghaben?
2. Genau deine Meldung bei Google eingetippt 1:1 -> 1.Link -> gelöst!

Warum nicht selbst zuerst bei Google geschaut? Geht doch schneller als auf eine Antwort warten
 

Flown

Administrator
Mitarbeiter
Also Java richtig verwenden, dann bekommt man auch keine Warnings. Beim sortieren ist ein Fehler: Arrays starten bei 0.
Richtig:

Java:
public class Listing0907 {

  public static <T extends Comparable<? super T>> T getSmallest(T[] objects) {
    T smallest = objects[0];

    for (int i = 1; i < objects.length; i++) {
      if (objects[i].compareTo(smallest) < 0) {
        smallest = objects[i];
      }
    }

    return smallest;
  }

  public static <T extends Comparable<? super T>> void bubbleSort(T[] objects) {
    boolean sorted;

    do {
      sorted = true;

      for (int i = 0; i < objects.length - 1; i++) {
        if (objects[i].compareTo(objects[i + 1]) > 0) {
          T tmp = objects[i];
          objects[i] = objects[i + 1];
          objects[i + 1] = tmp;
          sorted = false;
        }
      }
    }
    while (!sorted);
  }

  public static void main(String[] args) {
    // Erzeugen eines String-Arrays
    String[] objects = { "STRINGS", "SIND", "PAARWEISE", "VERGLEICHBAR" };

    // Ausgeben der kleinsten Elements
    System.out.println(getSmallest(objects));
    System.out.println("--");

    // Sortieren und Ausgaben
    bubbleSort(objects);

    for (String s : objects) {
      System.out.println(s);
    }
  }
}
 
Zuletzt bearbeitet:

RalfiBB

Neues Mitglied
public static <T extends Comparable<? super T>> T getSmallest(T[] objects) {

Das ist für mich reine Wahnsinn. Muss man wirklich jedes mal so schreiben? Verstehe nicht, warum im Buch das nicht erläutert wird. Und übrigens, die Methode getSmallest gibt "PAARWEISE" statt "SIND" zurück. Original Beispiel kann man hier ansehen.
 

Flown

Administrator
Mitarbeiter
Das ist es ja du musst es nicht jedes mal neu schreiben!

Nachdem die Methode static ist wird der Parameter T vor dem Rückgabewert (was auch wieder T ist) definiert.

Code:
<T extends Comparable<? super T>>
heißt nichts anderes, dass T ein Subtyp oder ein Typ von Comparable sein kann.
Da
Code:
Comparable<? super T>
selbst typisiert ist, wird mit dem Wildcardoperator (?) irgendeine Superklasse von T oder T selbst genannt. Somit ist sichergestellt, dass diese Methode von allen Implementierungen von Comparable mit dem T Operand als maximale Ableitung von Comparable<? super T> aufgerufen werden kann.

Java:
package warnings;

public class Listing0907 {
  public static <T extends Comparable<? super T>> T getSmallest(T[] objects) {
    T smallest = objects[0];
    for (int i = 1; i < objects.length; i++) {
      if (objects[i].compareTo(smallest) < 0) {
        smallest = objects[i];
      }
    }
    return smallest;
  }

  public static <T extends Comparable<? super T>> void bubbleSort(T[] objects) {
    boolean sorted;
    do {
      sorted = true;
      for (int i = 0; i < objects.length - 1; ++i) {
        if (objects[i].compareTo(objects[i + 1]) > 0) {
          T tmp = objects[i];
          objects[i] = objects[i + 1];
          objects[i + 1] = tmp;
          sorted = false;
        }
      }
    }
    while (!sorted);
  }

  public static <T extends Comparable<? super T>> void test(T[] array) {
    System.out.println(getSmallest(array));
    System.out.println("--");
    bubbleSort(array);
    for (T t : array) {
      System.out.println(t);
    }
  }

  public static void main(String[] args) {
    String[] objects = { "STRINGS", "SIND", "PAARWEISE", "VERGLEICHBAR" };
    test(objects);

    Integer[] integers = { 1, 5, -1, -3 };
    test(integers);
  }
}

So um das zu verdeutlichen wie das mit Generizität funktioniert.

(PS: "PAARWEISE" ist lexikalisch kleiner als "SIND" - er gibt dir schon das richtige zurück)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Note errechnen! Java Basics - Anfänger-Themen 2
J Note bestimmen Java Basics - Anfänger-Themen 13
S Uses or overrides a depcrecated API Java Basics - Anfänger-Themen 1
S Fehlermeldung: uses unchecked or unsafe operations ? Java Basics - Anfänger-Themen 6
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
MiMa Was bedeutet unchecked or unsafe operations? Java Basics - Anfänger-Themen 6
O unchecked Exception Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
B Datentypen Casts typesafe machen? ("unchecked") Java Basics - Anfänger-Themen 10
N Generic clonen => eclipse empfiehlt @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 2
H Warning: unchecked Java Basics - Anfänger-Themen 5
D Wie "unchecked cast" hier vermeiden? Java Basics - Anfänger-Themen 2
M Generics - "Unchecked cast"-Warnung wegbekommen Java Basics - Anfänger-Themen 4
A Unterschied zwischen Checked und unchecked Exception Java Basics - Anfänger-Themen 3
S ArrayList<Element> - "unchecked or unsafe operati Java Basics - Anfänger-Themen 13
P unchecked conversion to conform to Comparator Java Basics - Anfänger-Themen 3
C Unchecked Call? Wie Warnung beseitigen? Java Basics - Anfänger-Themen 3
G Frage zu: @SuppressWarnings("unchecked") Java Basics - Anfänger-Themen 4
S "Unchecked Cast" Warnung Java Basics - Anfänger-Themen 3
T "Unchecked or unsave Opertions"-Fehler beseitigen Java Basics - Anfänger-Themen 16
G hashtable und unsafe, unchecked Code Java Basics - Anfänger-Themen 3
D Vector - unchecked Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben