Hi,
bevor ich zu meinem Problem komme, kurz über mich: Ich bin seit einigen Jahren Entwickler und beherrsche ein recht breites Spektrum an Sprachen. Java begleitet mich dabei schon die ganze Zeit. Meine Erfahrungen gehen über Code-Generierung, Classloader-Manipulation, Reflection, Spring, Hibernate, Tomcat usw. Nun zu meinem Problem:
In einer Applikation rufe ich eine statische Methode:
mit:
Code:
Das funktioniert auch wunderbar
Wenn ich das jetzt in einem Tomcat mache, geht das nicht. Ich erhalte eine NoSuchMethod Exception, weil die VM eine Methode mit der Signatur "
" erwartet. Die gibt es ja nicht. Die Signatur nach dem Compilieren ist ja "
". Wenn ich also die Typangabe in der statischen Methode auf <T> abändere, geht es auch im Tomcat wieder, weil die Signatur dann wieder passt.
Wieso handhabt die VM das im Tomcat anders als in einer normalen Application? Oder anders: Wieso wird im Tomcat gleich auf Object zurückgeführt und nicht vorher noch auf Number?
Ich hoffe, mir kann einer helfen. Ich kann mir das Verhalten nicht erklären, da es ja eigentlich mit dem Generics-Standard bricht.
Viele Grüße
Carsten
PS. Wenn hier einer mitliest, der durch Zufall auch im MacUser Forum liest: Entschuldige den Cross-Post . Ich erhoffe mir hier inzwischen eher Hilfe.
bevor ich zu meinem Problem komme, kurz über mich: Ich bin seit einigen Jahren Entwickler und beherrsche ein recht breites Spektrum an Sprachen. Java begleitet mich dabei schon die ganze Zeit. Meine Erfahrungen gehen über Code-Generierung, Classloader-Manipulation, Reflection, Spring, Hibernate, Tomcat usw. Nun zu meinem Problem:
In einer Applikation rufe ich eine statische Methode:
Java:
public static <T extends Number> T getNumber(String str, Class<T> clazz, T value) {
// simplified!!
return value;
}
Code:
Java:
my.pkg.Helper.getNumber("foo", java.lang.Long.class, 1L );
Wenn ich das jetzt in einem Tomcat mache, geht das nicht. Ich erhalte eine NoSuchMethod Exception, weil die VM eine Methode mit der Signatur "
Code:
Object getNumber(String, Class, Object)
Code:
Number getNumber(String, Class, Number)
Wieso handhabt die VM das im Tomcat anders als in einer normalen Application? Oder anders: Wieso wird im Tomcat gleich auf Object zurückgeführt und nicht vorher noch auf Number?
Ich hoffe, mir kann einer helfen. Ich kann mir das Verhalten nicht erklären, da es ja eigentlich mit dem Generics-Standard bricht.
Viele Grüße
Carsten
PS. Wenn hier einer mitliest, der durch Zufall auch im MacUser Forum liest: Entschuldige den Cross-Post . Ich erhoffe mir hier inzwischen eher Hilfe.