Если вы действительно хотите это сделать, вам нужно обернуть принятые вами классы в собственный собственный класс. В вашем примере, вероятно, что-то вроде:
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);
}
}
И ваш orDoer
метод становится:
public void orDoer(OrDoerElement someData) { .... }
Затем вы можете создать один из них и использовать в своем методе, используя:
orDoer(OrDoerElement.fromCharSequence("a string of chars"));
orDoer(OrDoerElement.fromNumber(new Integer(6)));
Но, честно говоря, это звучит слишком сложно и слишком много работы, чтобы иметь возможность вызывать метод с разными типами параметров. Вы уверены, что не можете достичь того же, используя два метода и третий метод для общей логики?