Was passiert hier?

  • Themenstarter Themenstarter Jessica777
  • Beginndatum Beginndatum
J

Jessica777

Gast
Java:
package CollectionUndMap;

import java.util.*;

public class Test {
	public static void main(String[] args) {
		Set<String> set = new TreeSet<String>(new Comparator<String>() {
			public int compare(String s1, String s2) {
				return String.CASE_INSENSITIVE_ORDER.compare(s1.trim(), s2.trim());
			}
		});
	}
}

Ich bin auf diesem Code in meinem Buch gestoßen und verstehe nicht ganz was hier passiert ... Vor allem verwirrt mich das new Comperator<String>! Seit wann kann man denn interfaces instanziieren? Ich würde mich wirklich sehr freuen, wenn mir jemand die Details dieses Codefragments erklären könnte.

Vielen Dank im Voraus 🙂
 
Java:
new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return String.CASE_INSENSITIVE_ORDER.compare(s1.trim(), s2.trim());
            }
        });

In diesem Teil wird das Interface Implementiert. In einer Annonymen Inneren Klasse. Hab nochma ein @Override eingefügt, dann wirds vllt deutlicher: Da wird die Methode implementiert, die vom Interface vorgegeben wird.
 
Danke soweit 🙂 Aber das mit dem new vor dem Interface ist mir nicht klar.. heißt new <irgendeinInterface> {...} dass hier eigentlich eine Instanz von Comparable<String> steht?
 
'stehen' ist kein Fachbegriff in der Programmierung, insofern ist deine Frage nicht zu 100% zu beantworten, jedenfalls nicht mit ja oder nein

new bedeutet wie überall, dass ein einzelnes Objekt angelegt wird, entweder steht dahinter eine Klasse, im Speziallfall ein Array,
oder eben auch ein Interface, aber nur in Kombination mit {} dahinter, also die gleichzeitige Deklaration einer anonymen Klasse
 
Um es selbst zu verstehen habe ich den Code auseinander geschrieben.
Vielleicht hilfts noch jemandem ;-)

Java:
public class Test {

	private static class MyComparator implements Comparator<String> {
		@Override
		public int compare(String s1, String s2) {
			return String.CASE_INSENSITIVE_ORDER.compare(s1.trim(), s2.trim());		}
	}

	public static void main(String[] args) {
		MyComparator myComp = new MyComparator();
		Set<String> set2 = new TreeSet<String>(myComp);
	}
}
 

Neue Themen


Zurück
Oben