是否可以对接受 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/