java - 通用 OR 而不是 AND <T extends Number |字符序列>

标签 java android generics types charsequence

是否可以对接受 ClassA 或 InterfaceB 的方法进行一般参数化?

由于 | 无法编译伪代码

public <T extends Number | CharSequence> void orDoer(T someData){ // ... }

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

应该使用 Number OR CharSequence 参数传递

orDoer(new Integer(6));
int somePrimitive = 4;
orDoer(somePrimitive);
orDoer("a string of chars");

最佳答案

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

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)));

但老实说,这听起来有点太复杂,而且工作量太大,无法调用具有不同参数类型的方法。你确定你不能用两种方法达到同样的效果,第三种方法是通用逻辑吗?

关于java - 通用 OR 而不是 AND <T extends Number |字符序列>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330370/

相关文章:

java - 方法调用顺序

java - recyclerview后面显示的明文

java - 将非泛型方法转换为泛型方法

java - libgdx 批处理在 FitViewport 之外绘制

java - 尽管为 api 11 及更高版本设置了 list ,但 Android api 级别 14 上的 GridView 崩溃

android,无法在 ListView 的行中右侧对齐图标

android - 如何强制 TableLayout 适合整个屏幕?

generics - F# - 类型参数在 'k : comparison 时缺少约束

c# - C#泛型方法中的转换问题

java - 返回调用方法或获取 JCheckBox 的选择结果