通用OR代替AND <T扩展Number | 为CharSequence>

Cel*_*Cel 26 java generics android types charsequence

是否可以通用参数化接受EAEER ClassA或InterfaceB的方法?

由于|不编译 伪代码

public <T extends Number | CharSequence> void orDoer(T someData){ // ... }
Run Code Online (Sandbox Code Playgroud)

即不是写多个方法签名,我希望这个方法接受Number或CharSequence作为参数

应该使用Number或CharSequence参数传递

orDoer(new Integer(6));
int somePrimitive = 4;
orDoer(somePrimitive);
orDoer("a string of chars");
Run Code Online (Sandbox Code Playgroud)

Gui*_*ume 18

如果你真的想这样做,你需要将自己接受的类包装在自己的自定义类中.在您的示例中,可能类似于:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

你的orDoer方法变成:

public void orDoer(OrDoerElement someData) { .... }
Run Code Online (Sandbox Code Playgroud)

然后你可以使用以下任一方法构建其中一个并在你的方法中使用:

orDoer(OrDoerElement.fromCharSequence("a string of chars"));
orDoer(OrDoerElement.fromNumber(new Integer(6)));
Run Code Online (Sandbox Code Playgroud)

但老实说,这听起来有点过于复杂,太多工作只是为了能够调用具有不同参数类型的方法.您确定使用两种方法无法实现相同的目标,而第三种方法是通用逻辑吗?