was bringt <T>?



  • Ich habe mal diesen komischen typ ausprobiert, und mir ist nicht klar, wozu man das überhaupt braucht, denn es geht doch auch ohne:

    public class Pair<X, Y> {
    	private X first;
    	private Y second;
    	Pair(X first,Y second){
    		this.first = first;
    		this.second = second;
    	}
    	public X getFirst(){
    		return first;
    	}
    	public Y getSecond(){
    		return second;
    	}
    }
    
    public class Pair{
    	private Object first;
    	private Object second;
    	Pair(Object first,Object second){
    		this.first = first;
    		this.second = second;
    	}
    	public Object getFirst(){
    		//return new Object(first);
    		return first;
    	}
    	public Object getSecond(){
    		//return new Object(second);
    		return second;
    	}
    }
    

    In meinen bisherigen Versuchen sind beide Versionen 100% miteinander kompatibel (Bis auf das ich bei der unteren Version keine Typen angeben muss). Ich hab noch nicht einmal den Vorteil, dass ich mit den spitzen klammern eine Typumwandlung habe, also was für vorteile kann es mit sonst bringen?



  • Das du in deinem Code nicht casten musst.



  • Hallo,

    der Hauptvorteil von Pair<T,T> gegenüber Pair ist wohl die Typsicherheit. Wenn ich bspw. ein String-Paar habe:

    Pair<String, String> stringPair = new Pair<String, String>("Hallo", "Welt");
    
    Pair objectPair = new Pair("Hallo", "Welt");
    

    Bei der 1. Version kann ich wirklich nur Strings hinzufügen - sonst meckert der Compiler. Bei der 2. Version kann man alles was von Object erbt hinzufügen - obwohl das hier ggf. gewollt ist.

    Kurzum, die Generics sind eine Möglichkeit mehr Fehler schon beim Kompilieren und nicht erst zur Laufzeit zu erkennen.

    Wenn der Code kompiliert wurde sehen beide Varianten im Bytecode afaik wieder gleich aus.


Log in to reply