Ich möchte eine generische Methode schaffen, das tut effektiv diese:Java Generics und numerischen Typen
class MyClass {
static <T extends Number> T sloppyParseNumber(String str) {
try {
return T.valueOf(str);
} catch (Exception e) {
return (T)0;
}
}
}
Jetzt oben nicht aus zwei Gründen nicht kompiliert: Es gibt keine Number.valueOf()
Methode und 0 nicht gegossen werden T
.
Beispiel Nutzung:
String value = "0.00000001";
System.out.println("Double: " + MyClass.<Double>sloppyParseNumber(value));
System.out.println("Float: " + MyClass.<Float>sloppyParseNumber(value));
double d = MyClass.sloppyParseNumber(value);
float f = MyClass.sloppyParseNumber(value);
ist über generische Methode möglich mit Java implementieren? Wenn ja, wie? Wenn nein, was ist ein guter alternativer Ansatz?
Edit: Es scheint einige mögliche Duplikate zu sein, aber ich habe ein nicht gefunden, was genau diese abdeckt. Ich hoffe, es gibt einen Trick zu ziehen, der diese beiden Operationen ermöglichen würde: Zeichenfolge an eine Number
-Unterklasse analysieren und 0-Wert für eine Number
-Unterklasse zurückgeben.
Die ['Nummer'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Number.html) abstract class enthält keine Methode, um einen String nach einem Typ zu analysieren, da die Analyse nach einem bestimmten Typ erfolgt. Ein Vorschlag ist, nicht generisch zu verwenden, sondern Funktionen wie '... ToInteger',' ... ToDouble' und so weiter zu erstellen. –
Ich glaube nicht, dass es einen einfachen Weg dafür gibt. Ich würde einfach so etwas wie 'new MyClass (Wert) .asDouble() verwenden,' und Umsetzung des 'asInteger',' asLong', 'asFloat',' asDouble' usw. Methoden manuell – assylias
'T.valueOf()' wouldn‘ t funktionieren, selbst wenn eine statische Methode 'Number.valueOf()' vorhanden war; Sie können einfach keine generischen Typen wie diese verwenden. –