Templates
-
Hi jungs
ich hab da mal ne frage:
in c++ kann man ja templatemethoden einfach so schreiben:
template<typename T> T lol() { T test = T(); return test; }aber wie kann man sowas in java realisieren?
-
1. Das ist ein Funktionstemplate:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-151578.html (Punkt 11)
2. Du fragst nach Java in einem C++ Forum? Also viel verkehrter kann man ja wohl kaum sein.
3. Uff, wie ging das schon wieder ...class JavaClass { public T foo<T>() { T test = new T(); return test; } }Keine Garantie.

Grüssli
-
naja das war aus reinen taktischen gründen
hier weis jeder was das ist und hier guckt alle 2 sekunden eienr rein der ahnung hat
meistens auch von java
und im java unterforum ist immer tote hose...
-
LoL ... C++ Leute schauen halt über den Tellerrand ... ehm, nein, ich nehme das Statement zurück, KEIN FLAMEWAR BITTE!

Kurz Zeit gehabt und nachgeschaut wie es geht (hat mich grad selber interessiert):
public class JavaClass { public static void main(String[] args) { JavaClass jc = new JavaClass(); String str = jc.<String>foo(); } public <T> T foo() { T test = new T(); // <- ist allerdings in Java nicht möglich, // wie es scheint. Grund nicht ganz verstanden. return test; } }Grund: http://en.wikipedia.org/wiki/Generics_in_Java#Type_erasure
Grüssli
-
Möglich ist allerdings sowas:
public class JavaClass { public static void main(String[] args) { JavaClass jc = new JavaClass(); String str = jc.foo(String.class); // durch das Class-Objekt braucht kein // extra Parameter mehr angegeben werden } public <T> T foo(Class<T> cl) { T test = cl.newInstance(); return test; } }Nicht vergessen, bei newInstance() die möglichen Exceptions abzufangen.
-
Skym0sh0 schrieb:
in c++ kann man ja templatemethoden einfach so schreiben:
"Funktionstemplates"
Skym0sh0 schrieb:
template<typename T> T lol() { T test = T(); return test; }aber wie kann man sowas in java realisieren?
Gar nicht. Java unterstützt keine Templates. Wenn Du in Java eine "generische" Funktion schreibst, wird das Ding nur einmal übersetzt und dabei der Typparameter "gelöscht". Deswegen lässt man Dich auch nicht
new T()schreiben. Der Compiler weiß zur Zeit der Übersetzung nicht, was T ist, kann also auch kein T erzeugen. Das einzige, was Java Generics leistet, ist, dass es Dir das sonst nötige manuelle Downcasting erspart (wird automatisch gemacht) und mehr Typsicherheit bietet. Damit können Programmierfehler vorher abfangen werden, welche sonst ClassCastExceptions gewesen wären.Gruß,
SP
-
c++ ist doch soviel besser und einfacher als java (JA JUNGS KOMMT ALLE HER, HIER IST DER FLAMEWAR!!!)
schade dass wir mit java in der shcule arbeiten... da bin ich dem lehrer nicht so sehr vorraus wie ichs in c++ wäre
ging mir auch eher drum dass ich einen string einlese per buffered reader und den dann in einen gewünschten datentyp direkt schon konvertiere/parse
aber da hab ich auch zuviel in c++ gedacht weil da gehts ja einfach über stringstreams und so und in java gehts üüber wrapperclasses und das kann man per templates oder generics nicht lösen...
-
Skym0sh0 schrieb:
naja das war aus reinen taktischen gründen
hier weis jeder was das ist und hier guckt alle 2 sekunden eienr rein der ahnung hat
meistens auch von java
und im java unterforum ist immer tote hose...
Kann den Thread bitte ob dieser Arroganz jemand löschen?