mi piacerebbe creare un metodo generico che fa in modo efficace questo:generici Java e tipi numerici
class MyClass {
static <T extends Number> T sloppyParseNumber(String str) {
try {
return T.valueOf(str);
} catch (Exception e) {
return (T)0;
}
}
}
Ora sopra non compilare per due motivi: non c'è nessun metodo Number.valueOf()
e 0 non possono essere lanciati a T
.
Esempio di utilizzo:
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);
sta attuando sopra metodo generico possibile con Java? Se sì, come? Se no, qual è un buon approccio alternativo?
Modifica: sembra che ci siano alcuni possibili duplicati, ma non ne ho trovato uno, che copre esattamente questo. Spero che ci sia qualche trucco da prendere, che consentirebbe queste due operazioni: analizzare la stringa in una sottoclasse Number
e restituire il valore 0 per una sottoclasse Number
.
Il ['numero'] (http://docs.oracle.com/javase/6/docs/api/java/lang/Number.html) La classe astratta non contiene alcun metodo per analizzare la stringa in un tipo, poiché l'analisi viene eseguita da un tipo specifico. Un suggerimento è di non usare generici, ma di creare funzioni come '... ToInteger',' ... ToDouble' e così via. –
Non penso che ci sia un modo semplice per farlo. Vorrei semplicemente usare qualcosa come 'new MyClass (value) .asDouble();' e implementare manualmente i metodi 'asInteger',' asLong', 'asFloat',' asDouble' ecc. – assylias
'T.valueOf()' wouldn ' t funziona anche se esisteva un metodo statico 'Number.valueOf()'; semplicemente non puoi usare tipi generici come questo. –