Diciamo che hanno un metodo come questo:Metodo Generics senza argomenti
static class Example
{
public static <N extends Number> Number getOddBits(N type)
{
if (type instanceof Byte) return (byte)0xAA;
else if (type instanceof Short) return (short)0xAAAA;
else if (type instanceof Integer) return 0xAAAAAAAA;
else if (type instanceof Float) return Float.intBitsToFloat(0xAAAAAAAA);
else if (type instanceof Long) return 0xAAAAAAAAAAAAAAAAL;
else if (type instanceof Double) return Double.longBitsToDouble(0xAAAAAAAAAAAAAAAAL);
throw new IllegalArgumentException();
}
}
Le specifiche effettive del metodo non è veramente importante. Tuttavia, per chiamare questo metodo che usiamo:
Example.<Float>getOddBits(0f);
La mia domanda è, è possibile scrivere un tale metodo senza parametri convenzionali. Senza sovraccaricare, e in definitiva senza boxe.
Idealmente invocato da:
Example.<Byte>getOddBits();
suppongo non a causa della cancellazione, ma si potrebbe sbarazzarsi del parametro di istanza superfluo e utilizzare un oggetto di classe come parametro: 'getOddBits (Classe Clazz)'. Non penso che tu possa aggirare il pugilato in quanto il tipo di ritorno non è sufficiente per creare firme distinte, ad esempio 'byte getOddBits()' e 'int getOddBits()' potrebbe essere ambiguo. –
Pyranja
Ci potrebbero essere anche altre opzioni. Perché hai bisogno di fare questo? per il tuo esempio, con la restituzione di valori fondamentalmente statici potresti semplicemente usare un enum. Se c'è qualcosa di più specifico potrebbero esserci anche altre opzioni. Ad esempio, se si converte un numero in un altro modulo, è possibile creare un'interfaccia di conversione come con un metodo toBytes e fromBytes. quindi avere tutte le classi necessarie per implementarlo. Non sono sicuro che questo aiuti, se no, potresti fornire un esempio più specifico più vicino a quello che ti serve? –
@JohnKane L'esempio era arbitrario, solo per dimostrare l'uso di un tipo di restituzione sottoclasse come specificato tramite un argomento nel modo più accurato possibile. Probabilmente avrei potuto andare con il vecchio 'foo-bar-baz', ma ho pensato che un esempio pratico sarebbe stato più adatto. – azz