Se si davvero si desidera farlo, è necessario avvolgere le classi accettate all'interno di una classe personalizzata di yo proprio. Nel tuo esempio caso, probabilmente qualcosa come:
public class OrDoerElement {
private final Number numberValue;
private final CharSequence charSequenceValue;
private OrDoerElement(Number number, CharSequence charSequence) {
this.numberValue = number;
this.charSequenceValue = charSequence;
}
public static OrDoerElement fromCharSequence(CharSequence value) {
return new OrDoerElement(null, value);
}
public static OrDoerElement fromNumber(Number value) {
return new OrDoerElement(value, null);
}
}
e il metodo di orDoer
diventa:
public void orDoer(OrDoerElement someData) { .... }
Poi si può costruire uno di quelli e di utilizzare nel metodo utilizzando:
orDoer(OrDoerElement.fromCharSequence("a string of chars"));
orDoer(OrDoerElement.fromNumber(new Integer(6)));
Ma onestamente, sembra un po 'troppo complesso e troppo lavoro solo per essere in grado di chiamare un metodo con diversi tipi di parametri. Sei sicuro di non poter ottenere lo stesso usando due metodi e un terzo metodo per la logica comune?
Che cosa fareste dentro quel metodo che non può essere fatto con due metodi separati che accettano 'number' o' CharSequence' rispettivamente, e poi delegare ad una terza, metodo privato per fare il lavoro? –
Sono d'accordo che i guadagni sono inconsistenti se ho a che fare con due tipi, ma sembrerebbe un modo abbastanza conciso per delegare più tipi di parametri (che non condividono un supertipo utilizzabile) – Cel
Dovresti controllare [Ceylon] (http: // ceylon-lang.org/documentation/1.1/introduction/) Tipi di sindacati. ;) – Anonsage