warum instanzen typisieren?

ruutaiokwu

Top Contributor
hallo zusammen,

kann mir mal jemand erklären, warum es nötig ist, instanzen zu typisieren, also:

Java:
List<String> lst = new ArrayList<String>();

statt

Java:
List<String> list = new ArrayList();


ich meine ein downcasting (von Object zur konkr. klasse in der niedrigeren hierarchieebene) ist auch bei oberen bsp. nicht notwendig...

habe verschiedene leute in der firma gefragt, praktisch alle haben das

a.) nicht gewusst das dies geht

und

b.) keine erklärung dafür gefunden, was es für einen einfluss hat, wenn man die instanz typisiert oder nicht...


grüsse, jan
 

faetzminator

Gesperrter Benutzer
Es hat keinen Einfluss. Es soll auch per Java 7 wieder rausgenommen werden, da es keinen Sinn macht. K.A. obs aber dann wirklich umgesetzt wird.
 

tfa

Top Contributor
Ab Java 7 gibt es die "Diamond-Notation". Dann darfst du sowas schreiben:

Java:
List<String> list = new ArrayList<>();
 
M

maki

Gast
Java Generics bieten dem Compiler die Möglichkeit, manche Fehler gleich zu erkennen.

Um dein beispiel fortzuführen, bei
Java:
lst.add(3);
würde der Compiler einen Fehler melden.

Java:
List<String> list = new ArrayList();
Tja, dazu ist der Compiler im Moment noch zu doof und zeigt eine Warnung, keine sehr gute sog. "type inference", d.h. das im Kontext genug Infos da wären, dass der Compiler weiss welche Typen die ArrayList zu speichern hat.
 
S

SlaterB

Gast
die Infos sind schon da, nur werden sie nicht entsprechend ausgewertet,
irgendwie muss Java intern doch wissen, dass der Ausdruck 'new ArrayList<String>()' am Ende ein ArrayList-Objekt vom generischen Typ String ist,

von 'new ArrayList()' ist bekannt dass es eine ArrayList ist, über den generischen Typ ist auch etwas bekannt, dass nämlich keiner da ist,
an dieser Stelle muss einfach die Infomation von 'nix' in 'im Moment noch für alles passend' geändert werden ;)

solange das Objekt ganz neu ist und keine Methode aufgerufen wurde könnte das so bleiben,
aber da fangen wohl die Schwierigkeiten erst an,
von internen Änderungen, Threads ganz abgesehen, aber das ist ja fast unabhängig vom Code der Deklaration

Java:
public class Test {
    public static void main(String[] args)  {
       MyList<String> m = new MyList().add(45);
       System.out.println(m.l.get(0).substring(1)); // BOOM
    }
}

class MyList<T> {
     List<T> l;
    
    MyList() {
        l = new ArrayList<T>();
    }
    
    MyList<T> add(T t) {
        l.add(t);
        return this;
    }
}
 
Zuletzt bearbeitet von einem Moderator:

ruutaiokwu

Top Contributor
@tfa:

Java:
List<String> list = new ArrayList<>();

was ist denn das skurriles? die instanz wird automatisch gleich typisiert (statt nicht typisiert) wie der typ/die "variable" der liste??

gut und recht, nur stellt sich die frage, ob es ÜBERHAUPT notwendig ist...? laut der aussage von 'faetzminator' nämlich nicht...


@maki:

ja, das ist mir klar. es ist aber nicht von nöten, beide "seiten" zu typisieren damit der kompiler was erkennt. typ/"variable" ist ein muss, der rest ist, zumindest für den compiler, nicht "nice to have", sondern komplett überflüssig...
 

ruutaiokwu

Top Contributor
aha, slaterb hat inzwischen was geschreiben, danke dir!

"von 'new ArrayList()' ist bekannt dass es eine ArrayList ist, über den generischen Typ ist auch etwas bekannt, dass nämlich keiner da ist,
an dieser Stelle muss einfach die Infomation von 'nix' in 'im Moment noch für alles passend' geändert werden"


im Moment noch für alles passend == intern mit java.lang.Object arbeitend ???
 

ruutaiokwu

Top Contributor
aha, slaterb hat inzwischen was geschreiben, danke dir!

"von 'new ArrayList()' ist bekannt dass es eine ArrayList ist, über den generischen Typ ist auch etwas bekannt, dass nämlich keiner da ist,
an dieser Stelle muss einfach die Infomation von 'nix' in 'im Moment noch für alles passend' geändert werden"


im Moment noch für alles passend == intern mit java.lang.Object arbeitend ???

könnte mir vorstellen, dass das einen einfluss auf die geschwindigkeit haben könnte?
 
S

SlaterB

Gast
Object steht schon für 'nix',
'im Moment noch für alles passend' meine ich hinsichtlich 'wenn dieses Objekt jetzt in einer Variablen mit bestimmten generischen Type gespeichert ist, dann ist das ok, dann wird nicht gemeckert sondern eben dieser Typ angenommen, das passt schon'
genau wie halt gewünscht, man muss es dem Compiler nur als Regel hinterlegen

naja, ist ja auch klar dass es irgendwie möglich ist und in Java 7 vielleicht kommt oder nicht, in anderen Sprachen schon gibt oder nicht,
eigentlich habe ich gar nix zu sagen ;)
 
M

maki

Gast
Generic werden vom compiler so gut wie vollständig gelöscht (type ersure), sind nur sinnvoll für den Compiler, nciht zur Laufzeit, deswegen kein Performaceunterschied mit oder ohne Generics.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
S Instanzen Allgemeine Java-Themen 15
R Instanzen eines Programms Allgemeine Java-Themen 8
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
3 OOP Instanzen aus einer Klasse persistent speichern. Allgemeine Java-Themen 9
V Array aus Instanzen, NullPointer Allgemeine Java-Themen 4
H [Logback || log4j] Wie richtig loggen / Log Instanzen verwalten Allgemeine Java-Themen 2
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
P Mehrere Instanzen der selben Appl. verhindern Allgemeine Java-Themen 12
G enf instanzen Allgemeine Java-Themen 5
B 2 JList instanzen wo nur einer zur selben Zeit selektierbar? Allgemeine Java-Themen 8
B Instanzen einer Klasse als Array Allgemeine Java-Themen 7
K JNI: mehrere "Instanzen" einer C++ DLL? Allgemeine Java-Themen 3
C Mehrere Instanzen für einen Programm Allgemeine Java-Themen 3
X Mehrere Instanzen erzeugen Allgemeine Java-Themen 6
D Gehts praktischer? Thema:Verschiedene Instanzen einer Klasse Allgemeine Java-Themen 3
P Mehrere Instanzen beim IE verhindern Allgemeine Java-Themen 11
F Das Anlegen von Objekt-Instanzen... Allgemeine Java-Themen 4

Ähnliche Java Themen


Oben